我傻了?!。
查看原帖
我傻了?!。
32379
Dickk楼主2020/11/7 10:49
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=5e3+5,maxm=2e5+5;
int n,m,e;
ll ans;
int fa[maxn];
int getfa(int x){return fa[x]==x?x:fa[x]=getfa(fa[x]);}
struct arr{
	int x,y,z;
	friend bool operator <(arr a,arr b){
		return a.z<b.z;
	}
}a[maxm];
inline void read(int &x){
	x=0;
	char ch=getchar();
	int f=1;
	while (!isdigit(ch)){if (ch=='-')f=-1;ch=getchar();}
	while (isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
	x*=f;
}
int main()
{
	read(n);read(m);
	for (int i=1;i<=m;i++)read(a[i].x),read(a[i].y),read(a[i].z);
	for (int i=1;i<=n;i++)fa[i]=i;
	sort(a+1,a+m+1);
	for (int i=1;i<=m;i++){
		int fx=getfa(a[i].x),fy=getfa(a[i].y);
		if (e==n-1)break;
		if (fx!=fy){
			e++;
			ans+=a[i].z;
			fa[fy]=fx;//改成fa[fx]=fy就RE???
		}
	}
	e!=n-1?puts("orz"):printf("%lld",ans);
	return 0;
}

为什么呢?

2020/11/7 10:49
加载中...