专题四 · 1001
来源:互联网 发布:redis数据持久化 编辑:程序博客网 时间:2024/05/17 08:36
代码及解释
#include <algorithm>#include <iostream>//// kruskal + 并查集 + 边表//struct node { int from; int to; int w;};node edge[102 * 100];int parent[102];bool cmp(node a, node b) { if (a.w <= b.w) return true; return false;}//查找已经建完道路的顶点int find(int a) { if (a != parent[a]) return find(parent[a]); else return a;}int kruskal(int n, int m) { std::sort(edge, edge + m, cmp); //将边的权值从小到大排序 int i, x, y, ans = 0; for (i = 0; i < m; i++) { x = edge[i].from; y = edge[i].to; x = find(x); y = find(y); if (x != y) { ans += edge[i].w; parent[y] = x; } } return ans;}int main() { int n, q, k, i, j, m; while (std::cin >> n) { m = 0; for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { std::cin >> k; if (i >= j) continue; //标记过的不用重复记录 edge[m].from = i; edge[m].to = j; edge[m].w = k; m++; } } for (k = 1; k <= n; k++) parent[k] = k; std::cin >> q; //将建完的道路的起点和终点都置为相同的起点 for (k = 1; k <= q; k++) { std::cin >> i >> j; i = find(i); j = find(j); parent[j] = i; } // n个点,m条边 std::cout << kruskal(n, m) << std::endl; } return 0;}
0 0
- 专题四 · 1001
- 专题四1001
- 专题四1001
- 1001-专题四
- ACM专题四1001
- 专题四 · 1002
- 专题四 · 1003
- 专题四 · 1004
- 专题四 · 1006
- 专题四 · 1005
- 专题四 · 1008
- 专题四 · 1009
- 专题四 · 1010
- 专题四 · 1011
- 2016sdau课程练习专题四 1001
- 3G专题四
- LDAP专题(四)
- 专题四1003
- Kinect开发教程一:OpenNI的安装与开发环境配置
- Android入门--多选项CheckBox 及CheckBox选择事件 的应用
- Java数据结构之简单的连接点(link)实现
- Security features in Android 5.0
- MyBatis Generator自动生成代码文件
- 专题四 · 1001
- Openlayers热力图层
- Java并发编程-并发队列(ConcurrentLinkedQueue)的原理分析
- Context都没弄明白,还怎么做Android开发?
- OC类
- Linux下C语言连接MySQL
- 湘潭大学中南邀请赛
- ios中webview的高级用法(二)
- OpenNI(开放自然交互)是一个多语言,跨平台的框架