9 A 2 B 12 I 25 B 3 C 10 H 40 I 8 C 2 D 18 G 55 D 1 E 44 E 2 F 60 G 38 F 0 G 1 H 35 H 1 I 35 3 A 2 B 10 C 40 B 1 C 20 0Sample Output
216 30
AC代码:
#include <stdio.h> #include <iostream> #include <stdlib.h> #include<algorithm> #include<cstring> #include<queue> #define MAX 1<<22; using namespace std; int z[1111][1111],p[1111],vis[1111],d[1111]; int a,b,c,pp,tt,closet[1111]; int m,n; void dks() { for(int i=1;i<=a;i++) { d[i]=z[1][i]; } for(int i=2;i<=a;i++) { int v; int t=MAX; for(int j=1;j<=a;j++) { if(d[j]!=0&&d[j]<t) { t=d[j]; v=j; } } tt=tt+t; d[v]=0; for(int j=1;j<=a;j++) { if(d[j]!=0&&z[v][j]<d[j]) { d[j]=z[v][j]; } } } } int main() { while(~scanf("%d",&a)&&a) { for(int i=0;i<=a;i++) { for(int j=0;j<=a;j++) { z[i][j]=MAX; } z[i][i]=0; } char l,x; for(int i=0;i<a-1;i++) { cin>>l>>m; int aa=l-'A'+1; while(m--) { cin>>x>>n; int bb=x-'A'+1; if(z[aa][bb]>n) z[aa][bb]=z[bb][aa]=n; } } tt=0; dks(); printf("%d\n",tt); } }
文章来源: A - Jungle Roads