poj2421kruskal算法模板题
来源:互联网 发布:淘宝开店书籍 编辑:程序博客网 时间:2024/06/03 08:11
#include <iostream>#include <algorithm>using namespace std;#define MAX_N 110 #define MAX_E 11000static int N;static struct Edge{int from;int to;int cost;}edge[MAX_E];static int E;static int cmp(Edge&ls,Edge&rs){return ls.cost<rs.cost;}static int par[MAX_N];static void init(){for (int i=0;i<MAX_N;++i) par[i] = i;}static int getParent(int u){if (par[u]!=u) par[u] = getParent(par[u]);return par[u];}static void merge(int u,int v){int p1 = getParent(u);int p2 = getParent(v);if (p1==p2) return;par[p1] = p2;}static bool same(int u,int v){int p1 = getParent(u);int p2 = getParent(v);if (p1==p2) return true;return false;}static int kruskal(){int res = 0;sort(edge,edge+E,cmp);for (int i=0;i<E;++i){int u = edge[i].from;int v = edge[i].to;if (!same(u,v)){merge(u,v);res+=edge[i].cost;}}return res;}int main(){scanf("%d",&N);int cnt = 0;int u,v;for(int i=1;i<=N;++i)for (int j=1;j<=N;++j){scanf("%d",&u);if (u!=0){ edge[cnt].from = i; edge[cnt].to = j; edge[cnt].cost = u; cnt++;}}init();E = cnt;int Q;scanf("%d",&Q);for (int i=0;i<Q;++i){scanf("%d %d",&u,&v);merge(u,v);}printf("%d\n",kruskal());return 0;}
0 0
- poj2421kruskal算法模板题
- Kruskal 算法模板题
- 算法刷题模板
- POJ1125Floyd-warshall算法模板题
- 【Eternallyc】模板题-Floyd算法
- ST算法模板题poj3264
- HDOJ1083 匈牙利算法模板题
- HDOJ2063(匈牙利算法模板题)
- 【模板】LCA Tarjan算法 (模板题:洛谷P3379)
- 【模板】匈牙利算法 二分图最大匹配题模板
- poj 1330lca模板题离线算法
- 图论---POJ 3660 floyd 算法(模板题)
- 最短路+hdu+spfa算法模板题
- POJ - 3974 Palindrome(Manacher算法模板题)
- hdu 5145 莫队算法模板题
- 匈牙利算法模板题 hdu 1150
- 扩展欧几里得算法模板题 zoj 3609
- hdu 1711 KMP算法模板题
- UVALive 4171 Bulletin Board
- Android 非空格式验证框架的使用,验证邮箱,非空,2选1等等
- Binary Tree Preorder Traversal
- 在PHP中定义常量时,const与define的区别
- LeetCode 16 3Sum Closest
- poj2421kruskal算法模板题
- 第二步开始:计算几何 数论
- 程序员如何开始你的 SOHO 之旅 (1)
- Median of Two Sorted Arrays
- Cocos2d-x 3.7学习笔记之Windows平台下新建项目,并用Visual Studio2013编辑
- jsoup抓取网页+详细讲解
- 怎样数出有多少个三角形?
- 保持好奇心,让程序员永远年轻
- 程序员如何开始你的 SOHO 之旅 (2)