51nod 1212 模板
来源:互联网 发布:淘宝劳模代购 编辑:程序博客网 时间:2024/05/18 21:47
N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树。
Input
第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量。(2 <= N <= 1000, 1 <= M <= 50000)
第2 - M + 1行:每行3个数S E W,分别表示M条边的2个顶点及权值。(1 <= S, E <= N,1 <= W <= 10000)
Output
输出最小生成树的所有边的权值之和。
Sample Input
9 14
1 2 4
2 3 8
3 4 7
4 5 9
5 6 10
6 7 2
7 8 1
8 9 7
2 8 11
3 9 2
7 9 6
3 6 4
4 6 14
1 8 8
Sample Output
37
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int maxn=1000+10;//最大点数const int maxm=50000+10;//最大边数int F[maxn];//并查集 int n,m; struct Edge{ int u,v,w;}edge[maxm];//存储边的信息,包括起点。终点。权值 int tol;//边数,加边前赋值为0 void addedge(int u,int v,int w) { edge[tol].u=u; edge[tol].v=v; edge[tol++].w=w;}//边权从小到大 bool cmp(Edge a,Edge b) { return a.w<b.w;}int find(int x) { if(F[x]==-1) return x; else return F[x]=find(F[x]);}//传入点数,返回最小生成树的权值,如果不连通返回-1 int Kruskal(int n) { memset(F,-1,sizeof(F)); sort(edge,edge+tol,cmp); int cnt=0;//计算加入的边数 int ans=0; for(int i=0;i<tol;i++) { int u=edge[i].u; int v=edge[i].v; int w=edge[i].w; int t1=find(u); int t2=find(v); if(t1!=t2) { ans+=w; F[t1]=t2; cnt++; } if(cnt==n-1) break; } if(cnt<n-1) return -1;//不连通 else return ans;}int main() {// freopen("input.txt","r",stdin); while(scanf("%d%d",&n,&m)!=EOF) { tol=0; int a,b,c; for(int i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); addedge(a,b,c); } printf("%d\n",Kruskal(n)); } return 0;}
阅读全文
0 0
- 51nod 1212 模板
- 51NOD 1212 最小生成树模板
- 51nod 1264 线段相交 (模板)
- 51NOD 1136 欧拉函数模板
- 51nod 1086 多重背包模板
- 51nod 1085 01背包模板
- 51NOD 1264 两线段相交模板
- 51nod 1136 欧拉函数 【模板 】
- 51nod 1212 无向图最小生成树(prim,kruskal模板)
- 51nod 1212
- 51nod 1079 中国剩余定理 (模板)
- 51nod 1256 乘法逆元 (模板)
- 矩阵模板 51nod 算法马拉松分解问题
- 51nod 1206 1028 1494题解+扫描线模板
- [杜教筛模板] 51Nod 1239 欧拉函数之和
- 51NOD 1068 Bash游戏 V3 (大数模板套用) 博弈
- 51NOD 1185 威佐夫游戏 V2(大数运算 JAVA 模板)
- 51NOD 最长递增子序列(模板)
- CC2640R2F BLE5.0 编译第一个工程(simple_peripheral)
- C++多态分析
- Stockbroker Grapevine (弗洛伊德)
- POJ 2421 Constructing Roads
- 练习 2-2 在不使用运算符&&或||的条件下编写一个与上面的for 循环语句等价的循环语句。
- 51nod 1212 模板
- Pandas学习之文本拆分
- [LintCode]Compare Strings(C++|Python)
- Spring相关部分注解的用法:
- spark 调度模块详解及源码分析
- C++OJ提交题目中的语言选项里G++与C++的区别
- js数组去重
- jquery中的attr()和prop()的区别
- PAT---1021. 个位数统计 (15)