标签:
Description
Input
Output
Sample Input
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 0
Sample Output
216 30
此题输入有问题,再输入字符的时候,如果是scanf(“%c”)的话可能会RE,应该改为1s可以过得
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; const int inf=0x7fffffff; int map[100][100]; int dis[100],vis[100]; int n; int prim(int u) { int sum=0; for(int i=1; i<=n; i++) { dis[i]=map[u][i]; } vis[u]=1; for(int k=1; k<n; k++) { int tmin=inf; int temp; for(int j=1; j<=n; j++) { if(dis[j]<tmin&&!vis[j]) { tmin=dis[j]; temp=j; } } vis[temp]=1; sum+=tmin; for(int i=1; i<=n; i++) { if(dis[i]>map[temp][i]&&!vis[i]) dis[i]=map[temp][i]; } } return sum; } int main() { while(scanf("%d",&n)!=EOF) { if(!n) break; getchar(); memset(vis,0,sizeof(vis)); memset(dis,0,sizeof(dis)); // memset(map,0,sizeof(map)); for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { if(i==j) map[i][j]=0; else map[i][j]=inf; } } char c1,c2; int cnt,w; for(int i=1;i<n;i++){ scanf("%1s %d",&c1,&cnt); int u=c1-‘A‘+1; for(int j=1;j<=cnt;j++){ scanf(" %1s %d",&c2,&w); int v=c2-‘A‘+1; map[u][v]=map[v][u]=min(w,map[u][v]); } getchar(); } printf("%d\n",prim(1)); } return 0; }
标签:
原文地址:http://www.cnblogs.com/13224ACMer/p/4986723.html