站外题求调(玄关)
  • 板块灌水区
  • 楼主liuruihang2027
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/2/7 15:31
  • 上次更新2025/2/7 17:31:31
查看原帖
站外题求调(玄关)
1404123
liuruihang2027楼主2025/2/7 15:31

传送门

#include <bits/stdc++.h>
using namespace std;
struct N{
	int p,x,y,v;
}Node[1001];
int n,m,f[1001],ans,tot;
bool cmp(N x,N y){
	return x.v<y.v;
}
int father (int k){
	if (f[k]!=k) f[k]=father(f[k]);
	return f[k];
}
void unionn (int x,int y){
	int xx=father(x);
	int yy=father(y);
	if (xx!=yy) f[yy]=xx;
}
int main(){
	cin>>n>>m;
	for (int i=1;i<=m;i++){
		cin>>Node[i].p>>Node[i].x>>Node[i].y>>Node[i].v;
		if (Node[i].p==1){
			unionn(Node[i].x,Node[i].y);
			tot++;
			ans+=Node[i].v;
		}
	}
	for (int i=1;i<=n;i++){
		f[i]=i;
	}
	sort (Node+1,Node+m+1,cmp);
	for (int i=1;i<=m;i++){
		if (f[Node[i].x]==f[Node[i].y]) continue;
		unionn(Node[i].x,Node[i].y);
		ans+=Node[i].v;
		tot++;
		if (tot==n-1)
			break;
	}
	cout<<ans<<endl;
	return 0;
}
2025/2/7 15:31
加载中...