大致题意是求一颗最小生成树
题目链接:http://poj.org/problem?id=2421#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int dis[110][110],flag[110],distance;
int n,q,i,j,k;
while(cin>>n)
{
distance=0;
memset(flag,0,sizeof(flag));
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
cin>>dis[i][j];
}
}
cin>>q;
for(i=0;i<q;i++)
{
int a,b;
cin>>a>>b;
dis[a][b]=0;
dis[b][a]=0;
}
flag[1]=1;
int temp;
for(k=1;k<n;k++)
{
int min=100000;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(flag[i]==1&&flag[j]==0)
{
if(min>dis[i][j])
{
min=dis[i][j];
temp=j;
}
}
}
}
flag[temp]=1;
distance+=min;
}
cout<<distance<<endl;
}
return 0;
}