图结构练习——最小生成树
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的。现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市。
输入
输入包含多组数据,格式如下。
第一行包括两个整数n m,代表城市个数和可以修建的公路个数。(n <= 100, m <=1000)
剩下m行每行3个正整数a b c,代表城市a 和城市b之间可以修建一条公路,代价为c。
输出
每组输出占一行,仅输出最小花费。
示例输入
3 2 1 2 1 1 3 1 1 0
示例输出
2 0#include<bits/stdc++.h> using namespace std; int a[10000]; struct node { int a,b,c; }t[10000]; bool cmp(node a,node b) { return a.c<b.c; } int find(int x) { int r=x; while (r!=a[r]) r=a[r]; return r; } int main() { int n,m,s,i; while (cin>>n>>m) { for (i=0;i<=n;i++) a[i]=i; for (i=0;i<m;i++) { cin>>t[i].a>>t[i].b>>t[i].c; } sort(t,t+m,cmp); s=0; for (i=0;i<m;i++) { int x=find(t[i].a); int y=find(t[i].b); if (x!=y) { a[x]=y; s+=t[i].c; } } cout<<s<<endl; } return 0; }