HDU 1879 继续畅通工程(最小生成树 Kruskal)
2016-09-15 19:49
393 查看
AC代码:
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int node[110]; int _find(int x){ int xx = x; while(node[xx] != xx){ xx = node[xx]; } int temp; while(x != xx){ temp = node[x]; node[x] = xx; x = temp; } return xx; } bool _merge(int x,int y){ int xx = _find(x); int yy = _find(y); if(xx != yy){ node[yy] = xx; return false; } else{ return true; } } struct edge{ int from,to,v; }e[10000]; bool cmp(const edge &a,const edge &b){ return a.v < b.v; } int main() { int n,m; int xx,yy,v,ss; while(scanf("%d",&n),n){ int m = n*(n-1)/2; for(int i = 1;i <= 100;i++){ node[i] = i; } int cnt = 0; for(int i = 1;i <= m;i++){ scanf("%d%d%d%d",&xx,&yy,&v,&ss); // 注意得没有重边,否则这样输入就错了 if(ss == 1) _merge(xx,yy); else{ cnt++; e[cnt].from = xx; e[cnt].to = yy; e[cnt].v = v; } } sort(e+1,e+1+cnt,cmp); long long int ans = 0; for(int i = 1;i <= cnt;i++){ if(_merge(e[i].from,e[i].to) == false){ ans += e[i].v; } } printf("%I64d\n",ans); } return 0; }
相关文章推荐
- 【最小生成树+kruskal】杭电 hdu 1879 继续畅通工程
- HDU - 1879 [继续畅通工程] 最小生成树Kruskal
- HDU 1879 继续畅通工程(Kruskal求最小生成树)
- HDU 1879 继续畅通工程(最小生成树Kruskal)
- HDU - 1879 继续畅通工程(最小生成树kruskal)
- hdu1879(Kruskal最小生成树)--继续畅通工程
- HDU 1879--继续畅通工程【kruskal && 最小生成树 && 水题】
- HDU 1879 继续畅通工程(最小生成树-Kruskal)
- HDU1879 继续畅通工程 【图论】【最小生成树】【Kruskal】
- hdu 1879 继续畅通工程 最小生成树kruskal
- hdu1879 继续畅通工程(最小生成树)
- hdu1879 继续畅通工程(最小生成树、 并查集)
- HDU-1879-继续畅通工程-最小生成树&邻接表
- (step6.1.1)hdu 1879(继续畅通工程——最小生成树、kruscal)
- HDOJ 1879 继续畅通工程(最小生成树--kruskal)
- hdu 1879——继续畅通工程 最小生成树
- HDU 1879 继续畅通工程(最小生成树 Kruskal算法)
- MST(最小生成树)——Prim算法——HDU 1879-继续畅通工程
- hdu 1879 继续畅通工程(最小生成树,基础)
- 最小生成树:HDU 1879继续畅通工程