并查集+贪心 Conquer a New Region HDU 4118 && ZOJ 3659
2014-08-14 16:27
274 查看
据说是区域赛的题,拿到的时候可把我吓坏了,没想到是水水的一题
题意:
输入N表示N个城市,再输入N-1条路a,b,c,c是这条路的运载能力
计算以一个一个城市开始到各个城市运输的最大量
输入
5
1 2 1
2 3 1
2 4 1
4 5 1
则以2或4为中心,输出1+1+2+1=5
输入
5
1 2 1
2 3 1
2 4 1
4 5 1
则以4为中心,输出1+1+2=4
题意:
输入N表示N个城市,再输入N-1条路a,b,c,c是这条路的运载能力
计算以一个一个城市开始到各个城市运输的最大量
输入
5
1 2 1
2 3 1
2 4 1
4 5 1
则以2或4为中心,输出1+1+2+1=5
输入
5
1 2 1
2 3 1
2 4 1
4 5 1
则以4为中心,输出1+1+2=4
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define maxn 200005 using namespace std; struct xxx { int u,v,w; }num[maxn]; //存下输入的路,方便排序 int f[maxn]; //父节点 int level[maxn]; //当前点内包含点的个数 long long sum[maxn]; //当前点的运输量的和 int find(int i) //找根节点 { if(i==f[i]) return f[i]; f[i]=find(f[i]); return f[i]; } int cmp(xxx a,xxx b) { return a.w>b.w; } int main() { int n; int i,j; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n-1;i++) scanf("%d%d%d",&num[i].u,&num[i].v,&num[i].w); sort(num,num+n-1,cmp); //先排序,再处理 for(int i=1;i<=n;i++) //初始化 { sum[i]=0; f[i]=i; level[i]=1; } long long ans=0; i=0; for(i=0;i<n;i++) { int fr,ed; fr=find(num[i].u); ed=find(num[i].v); if(fr!=ed) { long long t1,t2; //注意开long long,没开WA了一发 t1=sum[fr]+(long long )num[i].w*level[ed]; //比较两种方式较大的一种,选择合适的中心 t2=sum[ed]+(long long )num[i].w*level[fr]; if(t1>t2) { f[ed]=fr; level[fr]+=level[ed]; sum[fr]=t1; ans=t1; } else { f[fr]=ed; level[ed]+=level[fr]; sum[ed]=t2; ans=t2; } } } printf("%lld\n",ans); } return 0; }
相关文章推荐
- hdu 4424 & zoj 3659 Conquer a New Region (并查集 + 贪心)
- hdu 4424 & zoj 3659 Conquer a New Region (并查集 + 贪心)
- ZOJ 3659 &amp; HDU 4424 Conquer a New Region (并查集)
- HDU 4118 && ZOJ 3659
- ZOJ 3659 & HDU 4424 Conquer a New Region (并查集)
- ZOJ 3811 dfs&并查集
- POJ 3659 Cell Phone Network【最小支配集 dp && 贪心】
- zoj 2109 || hdoj1009 FatMouse' Trade(贪心)
- zoj 3963 Heap Partition(并查集,贪心,二分)
- POJ 1862 & ZOJ 1543 Stripies(贪心 | 优先队列)
- POJ 1862 & ZOJ 1543 Stripies(贪心 | 优先队列)
- ZOJ 3659 Conquer a New Region 并查集
- NYOJ 208 Supermarket (贪心 && 并查集)
- zoj 3659 并查集
- ZOJ FatMouse' Trade 贪心
- zoj 3659 Conquer a New Region(并查集)
- zoj 2109 FatMouse' Trade简单的贪心 (注意double数组的排序问题)
- ZOJ 3659 Conquer a New Region(并查集)
- zoj 3659 并查集
- zoj 3659 Conquer a New Region【并查集】【2012长春现场赛】