Constructing Roads
Constructing Roads
https://vjudge.net/contest/477987#problem/F
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int inf=0x3f3f3f;
int map[105][105],d[105],c[105],n;
int prim()
{
int i,j,k,ans=0,u,cmin;
for(i=1;i<=n;i++)
{
d[i]=map[1][i];
c[i]=0;
}
c[1]=1;
for(i=1;i<n;i++)
{
cmin=inf;
for(j=1;j<=n;j++)
{
if(c[j]==0&&cmin>d[j])
{
cmin=d[j];
u=j;
}
}
c[u]=1;
ans+=cmin;
for(j=1;j<=n;j++)
{
if(c[j]==0&&d[j]>map[u][j])
d[j]=map[u][j];
}
}
return ans;
}
int main()
{
cin>>n;
memset(map,inf,sizeof(map));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>map[i][j];
}
}
int k;
cin>>k;
while(k--)
{
int a,b;
cin>>a>>b;
map[a][b]=map[b][a]=0;
}
cout<<prim()<<endl;
return 0;
}

浙公网安备 33010602011771号