HDU 1879 继续畅通工程
来源:互联网 发布:ubuntu kylin qq 编辑:程序博客网 时间:2024/05/23 21:42
思想:最小生成树,Kruskal。
#include<stdio.h>#include<iostream>#include<algorithm>#include<math.h>#include<string.h>using namespace std;int per[105];int n;struct Edge{ int x; int y; int dis;}edge[5005];bool cmp(Edge a, Edge b){ return a.dis < b.dis;}void init(){ for(int i = 0; i <= n; i ++) per[i] = i;}int find(int x){ if(x != per[x]) per[x] = find(per[x]); return per[x];}void join(int x, int y){ int s = find(x); int t = find(y); if(s != t) { per[s] = t; }}int kruskal(){ sort(edge+1,edge+n*(n-1)/2+1,cmp); int sum = 0, count = 0; for(int i = 1; i <= n*(n-1)/2; i++) { int s = find(edge[i].x); int e = find(edge[i].y); if(s != e) { join(s,e); sum += edge[i].dis; count ++; } if(count == n-1) break; } return sum;}int main(){ while(scanf("%d",&n)!= EOF && n) { init(); int a, b, d, f; for(int i = 1; i <= n*(n-1)/2; i ++) { scanf("%d%d%d%d",&a,&b,&d,&f); edge[i].x = a; edge[i].y = b; if(f == 0) edge[i].dis = d; else if(f == 1) edge[i].dis = 0; } int h = kruskal(); printf("%d\n",h); } return 0;}
如有错误,欢迎指出~
1 0
- HDU 1879 继续畅通工程
- 继续畅通工程 hdu 1879
- hdu 1879 继续畅通工程
- HDU 1879 继续畅通工程
- hdu 1879 继续畅通工程
- hdu 1879 继续畅通工程
- HDU 1879 继续畅通工程
- hdu 1879 继续畅通工程
- hdu 1879 继续畅通工程
- hdu 1879 继续畅通工程
- HDU 1879 继续畅通工程
- hdu 1879 继续畅通工程
- hdu - 1879 - 继续畅通工程
- hdu 1879 继续畅通工程
- hdu 1879 继续畅通工程
- hdu 1879 继续畅通工程
- hdu 1879(继续畅通工程)
- hdu 1879 继续畅通工程
- 学习SSH 增删改查
- 顺序统计量
- Linux(CentOS6.5)下编译安装Nginx官方最新稳定版(nginx-1.10.0)
- Eclipse进行可视化的GUI开发3大GUI插件
- 用户登录记住密码(SharedPreferences的使用)
- HDU 1879 继续畅通工程
- VTK基本概念之灯光
- lua的sort排序
- 剑指Offer 47 不用加减乘除做加法
- web中的session和cookie基本知识
- Java 对象与类
- 第59天(就业班) oracle存储过程、游标、函数
- //******************快速排序非递归算法(队列实现)*****************************
- 链表的反转(递归实现和非递归实现)