水题。。。。prim算法。。。。
#include<iostream>
#include<string.h>
#define N 105
#define M 99999999
#define FOR(i,s,t) for(int i=(s);i<=(t);++i)
using namespace std;
int n,m;
int map[N][N];
bool visit[N];
int dist[N];
void prim()
{ FOR(i,1,n)
{ dist[i]=M;
visit[i]=true;
}
int now=1;
dist[now]=0;
visit[now]=false;
int ans=0;
FOR(i,1,n)
{ ans+=dist[now];
FOR(j,1,n)
if(visit[j]&&dist[j]>map[now][j])
dist[j]=map[now][j];
int minx=M;
FOR(j,1,n)
if(visit[j]&&minx>dist[j])
minx=dist[now=j];
visit[now]=false;
}
cout<<ans<<endl;
}
int main()
{ while(cin>>n)
{
FOR(i,1,n)
FOR(j,1,n)
cin>>map[i][j];
cin>>m;
FOR(i,1,m)
{ int a,b;
cin>>a>>b;
map[a][b]=map[b][a]=0;
}
prim();
} return 0;
}