题解 | #黑白边#
黑白边
https://ac.nowcoder.com/acm/contest/9667/A
include
include<bits/stdc++.h>
using namespace std;
int f[2000000];
int n,m;
struct node{
int x,y,z;
}a[2000000];
bool cmp(node b,node bb)
{
return b.z<bb.z;
}
void init()
{
for(int i=0;i<=n;i++)
f[i]=i;
}
int Find(int x)
{
if(x==Find(x))
return x;
return f[x]=Find(x);
}
int Kruskal()
{
int sum=0,ans=0;
for(int i=1;i<=m;i++)
{
int fx=a[i].x;
int fy=a[i].y;
fx=Find(fx);
fy=Find(fy);
if(fx!=fy)
{
f[a[i].x]=fy;
if(a[i].z==1)
{
ans++;
sum++;
}
}
if(sum>=n-1)
break;
}
if(sum>=n-1) return ans;
else return -1;
}
int main(void)
{
cin>>n>>m;
init();
for(int i=1;i<=m;i++)
{
cin>>a[i].x>>a[i].y>>a[i].z;
}
sort(a+1,a+m+1,cmp);
int ans=Kruskal();
return ans;
}