hdu 1102
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define maxn 105 #define INF 0x2fffffff int g[maxn][maxn]; int vis[maxn]; int dis[maxn]; void prim(int n) { int min,i,j,x,ans=0; memset(vis,0,sizeof(vis)); fill(dis,dis+maxn,INF); dis[1]=0; for(i=1;i<=n;i++) { min=INF; for(j=1;j<=n;j++) if(!vis[j]&&min>dis[j]) { min=dis[j]; x=j; } ans+=dis[x]; vis[x]=1; for(j=1;j<=n;j++) { if(!vis[j]&&dis[j]>g[x][j]) dis[j]=g[x][j]; } } printf("%d\n",ans); } int main() { int n,q,ln,a,b; int i,j; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(i!=j) g[i][j]=INF; else g[i][j]=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { scanf("%d", &ln); g[i][j]=ln; } scanf("%d",&q); for(i=1;i<=q;i++) { scanf("%d%d",&a,&b); g[a][b]=g[b][a]=0; } prim(n); } return 0; }