prim #2 #4 两个−1点WA
求助求助
#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;
}