# include<iostream>
# include<deque>
# include<vector>
# include<map>
# include<queue>
# include<cstring>
using namespace std;
typedef long long int ll;
ll inf=(1ll<<50);
int n,m;
ll ans;
ll nowdis[5050];
typedef struct
{
int b,e;
ll w;
} xinxi;
xinxi s[200000*3+10];
int len;
int f[200000*3+10];
int nex[200000*3+10];
void add(int x,int y,int z)
{
s[len].b=x;
s[len].e=y;
s[len].w=z;
nex[len]=f[x];
f[x]=len;
len++;
}
void prim()
{
int x=f[1];
for(int i=2;i<=n;i++)
{
nowdis[i]=inf;
}
while(x!=-1)
{
int j=s[x].e;
nowdis[j]=min(nowdis[j],s[x].w);
x=nex[x];
}
for(int i=2; i<=n; i++)
{
ll minn=inf;
int id=0;
for(int j=2; j<=n; j++)
{
if(nowdis[j]<minn&&nowdis[j])
{
minn=nowdis[j];
id=j;
}
}
ans+=minn;
nowdis[id]=0;
int x=f[id];
while(x!=-1)
{
int j=s[x].e;
if(s[x].w<nowdis[j])
{
nowdis[j]=s[x].w;
}
x=nex[x];
}
}
}
int main ()
{
memset(f,-1,sizeof(f));
cin>>n>>m;
for(int i=1; i<=m; i++)
{
int x,y;
ll z;
cin>>x>>y>>z;
add(x,y,z);
add(y,x,z);
}
prim();
for(int i=1;i<=n;i++)
{
if(nowdis[i])
{
cout<<"orz";
return 0;
}
}
cout<<ans;
return 0;
}
prim生成树
最新推荐文章于 2023-11-19 15:36:39 发布