prim #2 #4 两个-1点WA,求助求助
查看原帖
prim #2 #4 两个-1点WA,求助求助
247173
木易、楼主2023/10/11 20:17

primprim #2 #4 两个−1-1点WAWA

求助求助

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
inline int read()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
		{
			w=-1;
		}
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		s=s*10+ch-'0';
		ch=getchar();
	}
	return s*w;
}
int n,m;
int a[1005][1005];
int dis[1005];
int vis[1005];
void prim()
{
	int num=0;
	fill(dis,dis+n+1,-1);
	fill(vis+1,vis+n+1,0);
	dis[1]=0;
	for(int i=1;i<=n;i++)
	{
		int t=0;
		for(int j=1;j<=n;j++)
		{
			if(!vis[j]&&dis[j]>dis[t])t=j;
		}
		if(dis[t]==-1||t==0)
		{
			cout<<"-1";
			return;
		}
		vis[t]=1;
		num+=dis[t];
		for(int j=1;j<=n;j++)
		{
			if(dis[j]<a[t][j]&&!vis[j])
			{
				dis[j]=a[t][j];
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(!vis[i])
		{
			cout<<"-1";
			return;
		}
	}
	cout<<num;
}
int main()
{
	memset(a,0,sizeof(a));
	n=read(),m=read();
	for(int i=1;i<=m;i++)
	{
		int x=read(),y=read();
		a[x][y]=a[y][x]=max(a[x][y],read());
	}
	prim();
	return 0;
}
2023/10/11 20:17
加载中...