网页ui设计网站黄页公司
web/
2025/9/26 16:09:53/
文章来源:
网页ui设计网站,黄页公司,深圳人为什么不想去龙岗,大连公司网站建设题面 显然的一个建模是#xff0c;每个叶子对应一个权值#xff0c;代表比最晚的叶子早了多久#xff0c;然后我们要做的就是给每条边赋上值#xff0c;使得每个叶子到根的路径上的所有边权值和等于叶子的权值。 我们贪心的想一想#xff0c;必然是离根越近的边赋值多的情… 题面 显然的一个建模是每个叶子对应一个权值代表比最晚的叶子早了多久然后我们要做的就是给每条边赋上值使得每个叶子到根的路径上的所有边权值和等于叶子的权值。 我们贪心的想一想必然是离根越近的边赋值多的情况比较优(在保证同步的情况下)因为离根越近的边影响的叶子会更多。 而对于两个节点 u,v我们必须要在lca(u,v)以下的边中赋值使得 u和v同步因为再往上的边对u和v的影响就相同了。 于是根据以上两点可以得到一个比较简单的dp。 f[x]表示以x为根的子树所有叶子同步的最小代价转移很简单留给大家想了w #includebits/stdc.h
#define ll long long
using namespace std;
const int N500005;int hd[N],ne[N*2],to[N*2],val[N*2],num,n,S,mx[N];
ll f[N];inline void add(int x,int y,int z){to[num]y,ne[num]hd[x],hd[x]num,val[num]z;
} inline int read(){int x0; char chgetchar();for(;!isdigit(ch);chgetchar());for(;isdigit(ch);chgetchar()) xx*10ch-0;return x;
}void dfs(int x,int fa){for(int ihd[x];i;ine[i]) if(to[i]!fa)dfs(to[i],x),mx[x]max(mx[x],mx[to[i]]val[i]);for(int ihd[x];i;ine[i]) if(to[i]!fa)f[x]f[to[i]]mx[x]-mx[to[i]]-val[i];
}int main(){nread(),Sread();for(int i1,u,v,w;in;i) uread(),vread(),wread(),add(u,v,w),add(v,u,w);dfs(S,0);printf(%lld\n,f[S]);return 0;
}转载于:https://www.cnblogs.com/JYYHH/p/11258074.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81483.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!