Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1223 Accepted Submission(s): 403
2 1 0 1 10 4 0
10 impossible
<span style="font-size:12px;">#include<cstdio> #include<cstring> #define INF 0x3f3f3f int n,map[1010][1010],sum; void prim() { sum=0; int i,j,next,min; int lowcost[1010],visit[1010]; memset(visit,0,sizeof(visit)); for(i=0;i<n;++i) lowcost[i]=map[1][i]; visit[1]=1; for(i=1;i<n;++i) { min=INF; for(j=0;j<n;++j) { if(!visit[j]&&min>lowcost[j]) { min=lowcost[j]; next=j; } } if(min==INF) { printf("impossible\n\n"); return ; } sum+=min; visit[next]=1; for(j=0;j<n;++j) { if(!visit[j]&&lowcost[j]>map[next][j]) lowcost[j]=map[next][j]; } } printf("%d\n\n",sum); } int main() { int m,i,j,x,y,c; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i==j) map[i][j]=0;//考虑自环的情况 else map[i][j]=INF; } } while(m--) { scanf("%d%d%d",&x,&y,&c); if(map[x][y]>c)//自环的情况不计入 map[x][y]=map[y][x]=c; } prim(); } return 0; } </span>