码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 6060 RXD and dividing

时间:2017-08-01 19:13:11      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:for   hdu   its   c++   size   i++   eof   memset   clu   

思路:判断子树节点个数和k的最小值就好了,long long 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int N=1e6+10;
 5 
 6 int n,k;
 7 vector<pair<int ,ll > > e[N];
 8 ll sum;
 9 int a[N];
10 void dfs(int u,int fa){
11     a[u]=1;
12     for(int i=0;i<e[u].size();i++){
13         int v=e[u][i].first;
14         if(v==fa) continue;
15         dfs(v,u);
16         a[u]+=a[v];
17     }
18         for(int i=0;i<e[u].size();i++){
19             int v=e[u][i].first;
20             if(v==fa) continue;
21          //   cout<<e[u][i].second<<" "<<min(a[u]-1,k)<<" "<<u<<endl;
22             sum+=min(a[v],k)*e[u][i].second;
23         }
24 
25 }
26 int main(){
27     while(scanf("%d%d",&n,&k)!=EOF){
28         for(int i=1;i<=n;i++) e[i].clear();
29         memset(a,0,sizeof(a));
30         int x,y,z;
31         sum=0;
32         for(int i=1;i<n;i++){
33             scanf("%d%d%d",&x,&y,&z);
34             e[x].push_back(make_pair(y,z));
35             e[y].push_back(make_pair(x,z));
36         }
37         dfs(1,0);
38         cout<<sum<<endl;
39     }
40 }

 

hdu 6060 RXD and dividing

标签:for   hdu   its   c++   size   i++   eof   memset   clu   

原文地址:http://www.cnblogs.com/hhxj/p/7269982.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!