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;
}

 

posted @ 2022-02-09 20:41  是橙橙吖  Views(15)  Comments(0)    收藏  举报