2017第三次多校联合hdu6060
来源:互联网 发布:java替换\ 编辑:程序博客网 时间:2024/06/05 15:56
题目
题意:给你一棵树,树的边有边权,然后把点分为几个部分,然后这个部分与1相连,问如何分最后的最小斯坦纳树值最大。
题意:好像不需要最小斯坦纳树的什么东西。。。
分法:对于一个点来说,把他分成min(与他相连的边数,给定的部分数)。然后乘以边权累加就好了。具体看代码吧,应该挺好理解的。
#include<bits/stdc++.h>using namespace std;const int maxn=1000050;struct bbq{ int e,v;};int n,k;long long int ans=0;vector<bbq> e[maxn];bool vis[maxn];void add(int t1 , int t2 , int t3){ bbq l; l.e=t2; l.v=t3; e[t1].push_back(l);}int dfs(int x){ vis[x]=1; if(e[x].size()==1&&x!=1) return 1; int num=0; for(int i=0; i<e[x].size(); i++) { if(vis[e[x][i].e]==1)continue; int t=dfs(e[x][i].e); num+=t; ans+=(long long )t*(long long)e[x][i].v; } return (num+1>k)?k:(num+1);}int main(){ //freopen("data.in", "r", stdin); while(~scanf("%d%d",&n,&k)) { memset(vis,0,sizeof vis); ans=0; for(int i=1; i<n; i++) { int a,b,c; scanf("%d %d %d",&a,&b,&c); add(a,b,c); add(b,a,c); } dfs(1); printf("%lld\n",ans); for(int i=0; i<=n; i++) e[i].clear(); }}
阅读全文
0 0
- 2017第三次多校联合hdu6060
- 2017第三次多校联合HDU6059
- 2017第三次多校联合hdu6058
- 2017多校训练Contest3: 1005 RXD and dividing hdu6060
- 多校联合第三次题解(网页打不好开,扒下来看)
- hdu6060 一次就懂 dfs+思维 多校第三场1005
- 7/26第三次多校
- Hdu6060 RXD and dividing(2017多校第3场)
- 2017第一次多校联合Balala Power!
- 2017第一次多校联合 1006Function
- 2017第二次多校联合hdu6047Maximum Sequence
- 2017第二次多校联合Regular polygon
- 2017第二次多校联合hdu6053Tirck Gcd
- 2017第一次多校联合 hdu6035Colorful Tree
- 2017第二次多校联合Funnyfunction
- 2017第二次多校联合 hdu6052 tobemyboyfriend
- 2014年第三次多校总结
- 多校联合1004,hdu3832
- javascript(一)
- Hive 自定义函数函数
- 51nod 1001 数组中和等于K的数对
- 【JAVA】HDU 1312 Red and Black(DFS水题)
- 农夫约翰为了修理栅栏,要将一块很长的木块切割成N块,准备切成的木板的长度为L1,L2...LN,未切割前的木板的长度恰好为切割后木板的长度的总和,每次切断木板的时候,需要的开销为这块木板的长度,例如长
- 2017第三次多校联合hdu6060
- C++学习(1)
- HDU1465 不容易系列之一
- Object...values可变参数和Object[] values区别
- 腾讯第一次面试
- 数据结构:堆Heap
- 1. Two Sum
- STL中的deque学习笔记
- POJ 3270 Cow Sorting(置换)