当前位置: 首页 > news >正文

北京 公司网站 备案中 开通访问网页开发流程图

北京 公司网站 备案中 开通访问,网页开发流程图,赶集网免费发布信息,博达网站建设传送门 前题提要:感觉这道换根dp可以说是集中了换根dp的所有较高难度的操作和思想,以及较高的一些实现细节,可以说能够完全写出这道题才叫真正理解了换根dp,非常值得一做. 首先读完题意,不难发现这道题有很多限制.点的访问次数限制,必须访问某一个点,想要获得最大的贡献,没有…传送门 前题提要:感觉这道换根dp可以说是集中了换根dp的所有较高难度的操作和思想,以及较高的一些实现细节,可以说能够完全写出这道题才叫真正理解了换根dp,非常值得一做. 首先读完题意,不难发现这道题有很多限制.点的访问次数限制,必须访问某一个点,想要获得最大的贡献,没有限制初始起点.乍一看感觉完全没办法解决,我们考虑一个一个的去解决上述限制. 首先假设只想获得最大的贡献,那么这个显然是一个简单的树形dp,也就是 f [ u ] m a x ( f [ v ] w ) f[u]max(f[v]w) f[u]max(f[v]w). f [ u ] f[u] f[u]表示访问 u u u子树所能获得的最大贡献. 然后我们考虑加上访问次数的限制,我们发现对于一个点,无论他是起始点还是中途经过的点,只要访问这个点,我们就损失了一个进入机会.然后显然我们想访问一个子树获得子树的贡献就需要花费一次进入机会,因为我们进入一个子树必然需要返回.诶,此时我们就可以解决了.假设一个点的访问次数限制为 k k k,那么对于这个点来说,我们最多只能加入 k − 1 k-1 k−1个子树的贡献.所以我们考虑对所有子树的贡献进行一个排序,然后取前 k − 1 k-1 k−1个最大的贡献即可. 然后我们再考虑加入必须访问一个点的贡献.这一点直接解决起来就有点困难了,我们需要转化一下这个条件.我们考虑将这个必须访问的点当做我们的遍历的树的根节点,这样我们的必须访问的需求就迎刃而解了.因为对于刚开始的一棵树来说,我们这个根节点是必须遍历的,没有任何问题. 然后因为本题并没有限制初始点,所以我们需要进行一个换根.那么对于换完根的树来说,因为存在一个必须访问的点,所以我们限制换完根的子树必须选祖先那个子树即可.然后在自己的子树里选出前 k − 2 k-2 k−2大的. 至此本题的主要解决思路就结束了,但是本题在换根上的细节和经验问题还是比较多的(反正我当时在写这道题被细节方面搞了很久),接下来详细讲讲细节方面的处理 其实建议不看下文自己解决细节问题,毕竟只有自己的连续思考才毕竟清楚 考虑我们维护出了 f [ u ] f[u] f[u]表示访问一个节点所能获得的最大贡献,并且因为换根需求,我们考虑记录使用 m a x _ f max\_f max_f记录下所有的u子树对u的贡献,并且对此从大到小排个序. PS:这种记录子树对u的贡献的方法在很多题目中都需要体现(因为换根的时候需要考虑自身节点对父亲的贡献),但是很多题目都是记录最大值和次大值即可,这样较为方便,但是实际上那些题目都是可以直接记录所有的贡献然后等会处理,并且在本题中光记录最大和次大并不能解决问题,所以考虑直接记录所有的贡献 因为我们的父亲节点是必选的,为了方便解决问题,不妨设置一个辅助数组 f a _ v a l [ u ] fa\_val[u] fa_val[u]来记录以 u u u为根时 u u u节点的父亲子树对 u u u的贡献.然后设 d p [ u ] dp[u] dp[u]记录以 u u u为根时的贡献. 先来维护 f a _ v a l [ u ] fa\_val[u] fa_val[u]数组 然后我们考虑根节点从 u − v u-v u−v转移,此时需要进行分类讨论,考虑先维护辅助数组: 当v子树是 f [ u ] f[u] f[u]数组的一个贡献来源时:此时我们想要维护 f a _ v a l [ u ] fa\_val[u] fa_val[u]时,我们需要花费一次进入机会从 v v v进入到 u u u,然后我们还需要一次进入机会从 u u u到 u u u的父亲节点(因为父亲节点是必选的),所以此时我们就只剩下 k − 2 k-2 k−2棵可选择的子树贡献(并且这个k-2可子树是不能包括v的),那么考虑预处理出原本 u u u子树原 k − 1 k-1 k−1课子树的总贡献,然后减掉 v v v这个子树的贡献就维护出了前 k − 2 k-2 k−2棵除v子树外的最大贡献了.但是光光这样的方式是有问题的(当时卡了我很长时间),因为假设我们的u是根节点时,我们此时没有父亲那边的贡献,并且我们也不需要花一次进入机会去进入到父亲节点,所以这种情况下是需要特判的,具体特判方式看下文代码即可,此处不在赘述考虑v子树不是 f [ u ] f[u] f[u]的一个贡献来源,那么此时我们想要维护 f a _ v a l [ u ] fa\_val[u] fa_val[u]时,我们同样此时只需要记录 u u u子树除 v v v外的前 k − 2 k-2 k−2棵子树的贡献即可.因为此时v不处于前 k − 1 k-1 k−1大的贡献之间,所以我们直接预处理前 k − 2 k-2 k−2的 m a x _ f max\_f max_f的和即可.同样的,当我们是处于根节点时照样需要特判. 考虑我们如果维护出了 f a _ v a l fa\_val fa_val数组之后,对于我们的 d p dp dp数组就不难维护了,我们此时的 d p [ u ] f a _ v a l [ u ] u 前 k − 2 大的子树的贡献和 dp[u]fa\_val[u]u前k-2大的子树的贡献和 dp[u]fa_val[u]u前k−2大的子树的贡献和 PS:此处同时也有一个小trick,因为时间复杂度的约束,我们不能实时的枚举v是否是u的一个贡献子树,所以我们需要在遍历子树之前先预处理一下这个状态,并且同时记录下前k-1大,前k大,前k-2大的子树的贡献和即可 下面是具体的代码部分: #include bits/stdc.h using namespace std; typedef long long ll; #define root 1,n,1 #define ls rt1 #define rs rt1|1 #define lson l,mid,rt1 #define rson mid1,r,rt1|1 inline ll read() {ll x0,w1;char chgetchar();for(;ch9||ch0;chgetchar()) if(ch-) w-1;for(;ch0ch9;chgetchar()) xx*10ch-0;return x*w; } inline void print(__int128 x){if(x0) {putchar(-);x-x;}if(x9) print(x/10);putchar(x%100); } #define maxn 1000000 const double eps1e-8; #define int_INF 0x3f3f3f3f #define ll_INF 0x3f3f3f3f3f3f3f3f struct Edge{int v,w; }; vectorEdgeedge[maxn];int k[maxn]; int f[maxn];vectorpairint,int max_f[maxn]; int n,d; void dfs1(int u,int per_u) {for(auto [v,w]:edge[u]) {if(vper_u) continue;dfs1(v,u);max_f[u].push_back({f[v]w,v});}sort(max_f[u].begin(),max_f[u].end());reverse(max_f[u].begin(),max_f[u].end());for(int i0;imin((int)max_f[u].size(),k[u]-1);i) {f[u]max_f[u][i].first;} } int dp[maxn];int check[maxn];int fa_val[maxn]; void dfs2(int u,int per_u) {int sum10,sum20,sum30;for(int i0;imax_f[u].size();i) {int vmax_f[u][i].second;int wmax_f[u][i].first;if(ik[u]-1) sum1w,check[v]1;if(ik[u]) sum2w;if(ik[u]-2) sum3w;}dp[u]sum3;for(auto [v,w]:edge[u]) {if(vper_u) continue;if(k[v]1) continue;if(check[v]) {if(u!d) fa_val[v]fa_val[u]sum1-f[v]-ww;else fa_val[v]fa_val[u]sum2-f[v]-ww; dp[v]fa_val[v];}else {if(u!d) fa_val[v]fa_val[u]sum3w;else fa_val[v]fa_val[u]sum1w; dp[v]fa_val[v];} dfs2(v,u);} } int main() {nread();dread();for(int i1;in;i) {int uread();int vread();int wread();edge[u].push_back({v,w});edge[v].push_back({u,w});}for(int i1;in;i) {k[i]read();}dfs1(d,0);dfs2(d,0);int ansf[d];for(int i1;in;i) {ansmax(ans,dp[i]);}coutansendl;return 0; }
http://www.hkea.cn/news/14519873/

相关文章:

  • 室内设计师网站十大网站两个人看的视频在线观看
  • 漯河建网站做网站优化两年遇到的SEO常态
  • 电子商务网站建设内容wordpress 上传图片不显示
  • 怎么制作ppt幻灯片长沙seo管理
  • 网站建设 入门知识ai效果图制作教程
  • 小米网站 用什么做的全国工程信息查询平台
  • p2p视频网站建设wordpress横幅
  • 怎么提高网站加载速度慢网站备案关闭网站
  • 深圳工程网站建设公司手机网站模板
  • 技术支持东莞网站建设机械有创意广告店名字大全
  • 完整个人网站html免费网址大全
  • 百度包年推广网站建设淘宝指数查询
  • 江苏响应式网站建设哪里有建设网站主题
  • 衡水市住房和城乡规划建设网站wordpress活动召集插件
  • 网站源码分享网杭州企业seo网站优化
  • 做网站送商标网站首页的布局设计
  • 百度做的网站 后台管理怎么进入网站建设公司使用图片侵权使用者有无责任
  • 网站建设规划书 百度文库信用卡在哪些网站上做推广
  • 创建好网站如何把浏览网络推广方案例子
  • 国外采购网站大全做蛋糕有哪些网站
  • 餐饮行业网站建设河南艾特网站建设公司
  • 做网站要学的东西做网站要用框架吗
  • 做网站的基本功建立网站的链接结构有哪几种形式
  • 微信小程序怎么上架商品seop
  • 凡科可以做返利网站吗网站开发付款
  • 做网站字体要求软件开发八个阶段
  • 东莞南城网站开发公司电话视觉设计网
  • 怎么管理网站数据库酒店网站建设系统介绍
  • 佛山骏域网站建设wordpress支持移动端
  • 上海住房和城乡建设厅网站素材