HDOJ Networking
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 6595 | Accepted: 3593 |
Description
Your task is to design the network for the area, so that there is a connection (direct or indirect) between every two points (i.e., all the points are interconnected, but not necessarily by a direct cable), and that the total length of the used cable is minimal.
Input
The maximal number of points is 50. The maximal length of a given route is 100. The number of possible routes is unlimited. The nodes are identified with integers between 1 and P (inclusive). The routes between two points i and j may be given as i j or as j i.
Output
Sample Input
1 0 2 3 1 2 37 2 1 17 1 2 68 3 7 1 2 19 2 3 11 3 1 7 1 3 5 2 3 89 3 1 91 1 2 32 5 7 1 2 5 2 3 7 2 4 8 4 5 11 3 5 10 1 5 6 4 2 12 0
Sample Output
0 17 16 26
#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int father[60],n,p; int find(int x){ return x==father[x]?x:father[x]=find(father[x]); } struct Node{ int s; int g; int d; }A[5000]; bool cmp(Node a,Node b){ return a.d<b.d; } void kruska(){ int i,sum=0,j; for(i=0;i<=p;++i) father[i]=i; int count=1; int fx,fy; for(i=0;i<n&&count<=p;++i){ fx=find(A[i].s); fy=find(A[i].g); if(fx!=fy){ sum+=A[i].d; count++; father[fx]=fy; } } printf("%d\n",sum); } int main() { int i,j,a,b,c; while(scanf("%d",&p),p){ scanf("%d",&n); for(i=0;i<n;++i){ scanf("%d%d%d",&A[i].s,&A[i].g,&A[i].d); } stable_sort(A,A+n,cmp); kruska(); } return 0; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。