hdu1102(prime)


有一点特别,那几个点之间已经建好桥,就改变他们之间距离为0就好

#include<cstdio>
#include<cstring>
#include<iostream>
#define inf 99999999
using namespace std;
int M[110][110],dist[110],n;
bool visit[110];
int prime(int cur)
{
    memset(visit,false,sizeof(visit));
    for(int i=0;i<n;i++)
     dist[i]=M[cur][i];
    visit[cur]=true;
    int sum=0,index;
    for(int i=0;i<n-1;i++)
    {
        int Min=inf;
        for(int j=0;j<n;j++)
            if(!visit[j]&&dist[j]<Min)
            {
                Min=dist[j];
                index=j;
                //cout<<"Min"<<Min<<endl;
            }
            sum+=Min;
            visit[index]=true;
        for(int j=0;j<n;j++)
         if(!visit[j]&&M[index][j]<dist[j])
            dist[j]=M[index][j];
    }
    return sum;
}

int main()
{
    while(~scanf("%d",&n))
    {
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
            scanf("%d",&M[i][j]);
        int Q;
        scanf("%d",&Q);
        for(int i=0;i<Q;i++)
        {
            int x,y;
            scanf("%d %d",&x,&y);
            M[x-1][y-1]=M[y-1][x-1]=0;
        }
        printf("%d\n",prime(0));
    }
}

你可能感兴趣的:(hdu1102(prime))