hdu4424
来源:互联网 发布:青海干部教育网络平台 编辑:程序博客网 时间:2024/06/06 09:58
/*
分析:
并查集(2012长春现场赛E题)。
蛋疼的再次爆栈了,囧~~
意外的在Statistic排了第一耶,625MS。太意外了,囧~~~
很巧妙的想法,由于路径的容量只与最小边有关,所
以把边从大到小排序,然后并查集,合并两个集合的时候
取max,就行了。
2012-10-24
*/
分析:
并查集(2012长春现场赛E题)。
蛋疼的再次爆栈了,囧~~
意外的在Statistic排了第一耶,625MS。太意外了,囧~~~
很巧妙的想法,由于路径的容量只与最小边有关,所
以把边从大到小排序,然后并查集,合并两个集合的时候
取max,就行了。
2012-10-24
*/
#pragma comment(linker, "/STACK:1024000000,1024000000")#include"stdio.h"#include"string.h"#include"stdlib.h"struct Eage{ int a,b; __int64 len;}eage[200111];int pre[200111];int num[200111];__int64 sum[200111];int cmp(const void *a,const void *b){ struct Eage *c,*d; c=(struct Eage *)a; d=(struct Eage *)b; return d->len-c->len;}void build(int n){ int i; for(i=1;i<=n;i++) {pre[i]=i;num[i]=1;sum[i]=0;}}int find(int k){ if(pre[k]==k) return k; pre[k]=find(pre[k]); return pre[k];}void Union(int f1,int f2,__int64 dir){ pre[f1]=f2; num[f2]+=num[f1]; sum[f2]+=dir;}int main(){ int n,t; int i,l; int f1,f2; long long dir1,dir2; while(scanf("%d",&n)!=-1) { build(n); t=n-1; for(i=0;i<t;i++) scanf("%d%d%I64d",&eage[i].a,&eage[i].b,&eage[i].len); qsort(eage,t,sizeof(eage[0]),cmp); for(i=0;i<t;i++) { f1=find(eage[i].a); f2=find(eage[i].b); if(f1==f2) continue;dir1=num[f2]*eage[i].len+sum[f1];dir2=num[f1]*eage[i].len+sum[f2]; if(dir1>dir2) Union(f2,f1,dir1-sum[f1]); else Union(f1,f2,dir2-sum[f2]); } printf("%I64d\n",sum[find(1)]); } return 0;}
- hdu4424
- hdu4424 并查集
- 并查集hdu4424
- HDU4424【并查集】
- HDU4424--Conquer a New Region
- hdu4424 Conquer a New Region
- hdu4424 并查集+贪心
- 2012长春站D题||hdu4424 并查集
- HDU4424:Conquer a New Region(并查集 + 贪心)
- 曲面分类
- 语音编码原理
- Silverlight+WCF登录验证源代码下载
- 有意思的互联网创业公司(Timehop/Redbeacon )
- struts2 注解方式注册action中 namespace 的注意事项
- hdu4424
- 发送邮件触发器
- #ifdef,#else,#endif,#if用法详解(转)
- 关于效率
- test
- ORTP 简介
- 眼中残留一滴泪,伤心为了谁?伤感日志
- iphone练习之TableView
- oracle基础