标签:algorithm c语言 numbers namespace merge
3 1 2 1 0 1 3 2 0 2 3 4 0 3 1 2 1 0 1 3 2 0 2 3 4 1 3 1 2 1 0 1 3 2 1 2 3 4 1 0
3 1 0#include <stdio.h> #include<string.h> #include <algorithm> using namespace std; typedef struct Road { int c1, c2, cost, state; }Road; bool myCompare(const Road &a, const Road &b) { if(a.cost < b.cost) return 1; return 0; } Road road[5051]; int city[101]; int Find(int n) { if(city[n] == -1) return n; return city[n] = Find(city[n]); } bool Merge(int s1, int s2) { int r1 = Find(s1); int r2 = Find(s2); if(r1 == r2) return 0; if(r1 < r2) city[r2] = r1; else city[r1] = r2; return 1; } int main() { //freopen("input.txt", "r", stdin); int n; while(scanf("%d", &n) && n) { int m = n*(n-1)/2; memset(city, -1, sizeof(city)); int count = 0; for(int i=0; i<m; ++i) { scanf("%d %d %d %d", &road[i].c1, &road[i].c2, &road[i].cost, &road[i].state); if(road[i].state == 1) { count ++; Merge(road[i].c1, road[i].c2); } } sort(road, road+m, myCompare); int sum = 0; for(int i=0; i<m; ++i) { if(Merge(road[i].c1, road[i].c2) && road[i].state == 0) { count ++; sum += road[i].cost; } if(count == n-1) break; } printf("%d\n", sum); } return 0; }#include <stdio.h> #include<string.h> #include <algorithm> int city[5000]; using namespace std; struct Road { int c1; int c2; int cost; int state; }; Road road[110]; bool cmp(Road a,Road b) { if(a.cost<b.cost) return 1; return 0; } int find(int a) { if(city[a]==-1) return a; return city[a]=find(city[a]); } bool merge(int x, int y) { int fx,fy; fx = find(x); fy = find(y); if(fx == fy) return 0; else if(fx < fy) //不能省去 city[fy] = fx; else city[fx] = fy; return 1; } int main() { int n, m; while(scanf("%d",&n),n) { m=n*(n-1)/2; int i; int count = 0; int sum = 0; memset(city,-1,sizeof(city)); for(i=0; i<m; i++) { scanf("%d %d %d %d",&road[i].c1, &road[i].c2, &road[i].cost, &road[i].state); if(road[i].state == 1) { count ++; merge(road[i].c1, road[i].c2); } } sort(road, road+m,cmp); for(i=0; i<m; i++) { if(merge(road[i].c1, road[i].c2) && road[i].state==0) { count ++; sum += road[i].cost; } if(count == n-1) break; } printf("%d\n",sum); } return 0; }
标签:algorithm c语言 numbers namespace merge
原文地址:http://blog.csdn.net/holyang_1013197377/article/details/40047793