考点:最小生成树
这里是完全图,不用考虑输入的边形成自环或重复边的情况,最小生成树一定存在!
思路:
1.先判断已修建的路是否可以保证连通性,若能,无需修建;(先合并)
若不能,选取连接两个连通分量的最小成本的路。(对未修建的边排序,再合并)
#include<bits/stdc++.h>
using namespace std;
const int MAXSIZE=10000;
struct edge {
int u,v;
int c;
edge(int u,int v,int c):u(u),v(v),c(c) {
}
};
vector<edge> edges,edges2;
int father[101];
int cmp(edge a,edge b);
int findRoot(int x);
int Union(vector<edge> e);
int main() {
int N,M;
while(cin>>N) {
if(N==0) {
break;
}
for(int i=1; i<=100; i++) {
father[i]=i;
}
int a,b,c,f;
M=N*(N-1)/2;
edges.clear();
edges2.clear();
for(int i=0; i<M; i++) {
cin&g