标签:道路 ota height stand from get 0ms name others
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3371
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 18733 Accepted Submission(s): 4563
20022026 | 2017-03-06 19:52:45 | Accepted | 3371 | 920MS | 1696K | 1381 B | G++ |
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 5 using namespace std; 6 7 struct point 8 { 9 int x,y,l; 10 }p[25010]; 11 int parent[510],n,m,k; 12 bool cmp(point a, point b) 13 { 14 return a.l < b.l; 15 } 16 int find(int x) 17 { 18 int s,tmp; 19 for (s = x; parent[s] >= 0; s = parent[s]); 20 while (s != x) 21 { 22 tmp = parent[x]; 23 parent[x] = s; 24 x = tmp; 25 } 26 return s; 27 } 28 void Union(int A, int B) 29 { 30 int a = find(A), b = find(B); 31 int tmp = parent[a] + parent[b]; 32 if (parent[a] < parent[b]) 33 { 34 parent[b] = a; 35 parent[a] = tmp; 36 } 37 else 38 { 39 parent[a] = b; 40 parent[b] = tmp; 41 } 42 } 43 void kruskal() 44 { 45 int i,u,v,sum = 0,j = 0; 46 for (i = 1; i <= n; i ++) 47 parent[i] = -1; 48 for (i = 0; i < m; i ++) 49 { 50 u = p[i].x; v = p[i].y; 51 if (find(u) != find(v)) 52 { 53 sum += p[i].l; 54 Union(u,v); 55 j ++; 56 } 57 if (j == n-1) break; 58 } 59 if (j == n-1) 60 printf("%d\n",sum); 61 else 62 printf("-1\n"); 63 } 64 int main () 65 { 66 int i,j,t,d; 67 int f[510]; 68 scanf("%d",&t); 69 while (t --) 70 { 71 scanf("%d%d%d",&n,&m,&k); 72 for (i = 0; i < m; i ++) 73 scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].l); 74 while (k --) 75 { 76 scanf("%d",&d); 77 for (i = 0; i < d; i ++) 78 scanf("%d",&f[i]); 79 for (i = 0; i < d-1; i ++) 80 { 81 p[m].x = f[i]; 82 p[m].y = f[i+1]; 83 p[m].l = 0; 84 m ++; 85 } 86 } 87 sort(p,p+m,cmp); 88 kruskal(); 89 } 90 return 0; 91 }
标签:道路 ota height stand from get 0ms name others
原文地址:http://www.cnblogs.com/yoke/p/6517085.html