九度:1024<并查集>

来源:互联网 发布:报表软件架构 编辑:程序博客网 时间:2024/05/22 14:07

浙大2007年研究生机试

畅通工程

#include <stdio.h>#include <iostream>#include <algorithm>using namespace std;int fa[110];struct Cost{int s;int e;int cost;bool operator < (const Cost &A) const {return cost < A.cost;}};int Getfa(int x){if (x == fa[x])return x;fa[x] = Getfa(fa[x]);return fa[x];}int main(){#ifdef ONLINE_JUDGE#else    freopen("E:\\in.txt", "r", stdin);#endifint n, m; //n 道路数,m村庄数while(scanf("%d %d", &n, &m) && n){Cost buf[110];int i;for(i=1; i<=m; i++){fa[i] = i;}for(i=0; i<n; i++){scanf("%d %d %d", &buf[i].s, &buf[i].e, &buf[i].cost);}sort(buf, buf+n);int ans=0;for(i=0; i<n; i++){if(Getfa(buf[i].s) != Getfa(buf[i].e)){fa[Getfa(buf[i].s)] = Getfa(buf[i].e);ans += buf[i].cost;}}int j, flag=1;for(i=1; i<=m; i++){for(j=i+1; j<=m; j++){if(Getfa(i) != Getfa(j)){flag = 0;break;}}}if(flag == 0)//资料不足printf("?\n");elseprintf("%d\n", ans);}//whilereturn 0;}


0 0