POJ 1287 Networking
Networking
64-bit integer IO format: %lld Java class name: Main
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
Source
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<queue> 5 #define INF 0x3f3f3f3f 6 #define pii pair<int,int> 7 using namespace std; 8 const int maxn = 55; 9 struct arc{ 10 int to,cost,next; 11 arc(int x = 0,int y = 0,int z = -1){ 12 to = x; 13 cost = y; 14 next = z; 15 } 16 }; 17 arc e[maxn*maxn]; 18 int head[maxn],d[maxn],tot,n,m; 19 bool done[maxn]; 20 void add(int u,int v,int w){ 21 e[tot] = arc(v,w,head[u]); 22 head[u] = tot++; 23 } 24 int prim(){ 25 int ans = 0; 26 for(int i = 0; i < maxn; ++i){ 27 done[i] = false; 28 d[i] = INF; 29 } 30 priority_queue< pii,vector< pii >,greater< pii > >q; 31 q.push(make_pair(d[1] = 0,1)); 32 while(!q.empty()){ 33 int u = q.top().second; 34 q.pop(); 35 if(done[u]) continue; 36 done[u] = true; 37 ans += d[u]; 38 for(int i = head[u]; ~i; i = e[i].next){ 39 if(d[e[i].to] > e[i].cost) 40 q.push(make_pair(d[e[i].to] = e[i].cost,e[i].to)); 41 } 42 } 43 return ans; 44 } 45 int main(){ 46 while(scanf("%d",&n),n){ 47 scanf("%d",&m); 48 memset(head,-1,sizeof(head)); 49 for(int i = tot = 0; i < m; ++i){ 50 int u,v,w; 51 scanf("%d %d %d",&u,&v,&w); 52 add(u,v,w); 53 add(v,u,w); 54 } 55 printf("%d\n",prim()); 56 } 57 return 0; 58 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。