hdu 6060 RXD and dividing (dfs)
2017-08-08 09:26
531 查看
怎么说呢,比赛的时候没看懂题,对就是没看懂题,应该多读几遍题,不要浮躁,浮躁解决不了问题,求得是最大的res,f(s)是最小的,就是求1-s的最短路径吧,说的应该是唯一的那条路径,不要走1-2-1-2-3直接1-2-3;然后求res最大。
把1看成整棵树的根.
问题相当于把2∼n2\sim
n2∼n每个点一个[1,k][1,
k][1,k]的标号.
然后根据最小斯坦纳树的定义, (x,fax)(x,
fa_x)(x,fax) 这条边的贡献是
x 子树内不同标号的个数目difidif_idifi.
那么显然有difi≤min(k,szi)dif_i\leq
min(k, sz_i)difi≤min(k,szi), szisz_iszi表示子树大小.
可以通过构造让所有difidif_idifi都取到最大值.
所以答案就是∑x=2nw[x][fax]∗min(szx,k)\sum_{x
= 2}^{n}{w[x][fa_x] * min(sz_x, k)}∑x=2nw[x][fax]∗min(szx,k)时间复杂度O(n)O(n)O(n).
fax就是x的父节点。
把1看成整棵树的根.
问题相当于把2∼n2\sim
n2∼n每个点一个[1,k][1,
k][1,k]的标号.
然后根据最小斯坦纳树的定义, (x,fax)(x,
fa_x)(x,fax) 这条边的贡献是
x 子树内不同标号的个数目difidif_idifi.
那么显然有difi≤min(k,szi)dif_i\leq
min(k, sz_i)difi≤min(k,szi), szisz_iszi表示子树大小.
可以通过构造让所有difidif_idifi都取到最大值.
所以答案就是∑x=2nw[x][fax]∗min(szx,k)\sum_{x
= 2}^{n}{w[x][fa_x] * min(sz_x, k)}∑x=2nw[x][fax]∗min(szx,k)时间复杂度O(n)O(n)O(n).
fax就是x的父节点。
#include<bits/stdc++.h> using namespace std; const int maxn=1000000+10; struct node { int v,w; node(){} node(int _v,int _w) { v=_v; w=_w; } }; vector<node>map1[maxn]; int pre[maxn],cnt[maxn]; void dfs(int u,int fa) { cnt[u]=1; for(int i=0;i<map1[u].size();i++) { int v=map1[u][i].v; if(v==fa)continue; pre[v]=map1[u][i].w; dfs(v,u); cnt[u]+=cnt[v]; } } int main() { int n,k; while(~scanf("%d%d",&n,&k)) { int u,v,w; for(int i=1;i<n;i++) { scanf("%d%d%d",&u,&v,&w); map1[u].push_back(node(v,w)); map1[v].push_back(node(u,w)); } dfs(1,-1); long long ans=0; for(int i=2;i<=n;i++) { ans+=(long long) pre[i]*min(k,cnt[i]); } printf("%lld\n",ans); for(int i=0;i<=n;i++)map1[i].clear(); } return 0; }
相关文章推荐
- hdu 6060 RXD and dividing 2017多校第三场第五题(思维+dfs)
- HDU 6060 17多校3 RXD and dividing(树+dfs)
- Hdu 6060 - RXD and dividing (dfs)
- hdu 6060 RXD and dividing(dfs)
- 【HDU 6060 RXD and dividing】+ DFS
- HDU - 6060 RXD and dividing(树的dfs)
- HDU 6060 RXD and dividing(dfs 思维)
- -----dfs+思维 hdu 6060-RXD and dividing
- HDU 6060 RXD and dividing【DFS】
- HDU 6060 RXD and dividing
- 2017 多校训练第三场 HDU 6060 RXD and dividing
- 2017多校联合第三场 1005题 hdu 6060 RXD and dividing (超详细!!!)构造
- 2017 Multi-University Training Contest 3( hdu 6060) RXD and dividing
- HDU 6060 RXD and dividing(贪心,思维)
- 17 多校 3 - 1005 - RXD and dividing (HDU 6060)
- HDU 6060 RXD and dividing
- HDU 6060 RXD and dividing (最小斯坦纳树)
- 2017多校第3场 HDU 6060 RXD and dividing 思维,构造最优解
- HDU 6060 RXD and dividing
- hdu RXD and dividing(dfs)