社区讨论

代码求条

P1001A+B Problem参与者 9已保存回复 11

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
11 条
当前快照
1 份
快照标识符
@mhjlbdwr
此快照首次捕获于
2025/11/04 04:26
4 个月前
此快照最后确认于
2025/11/04 06:32
4 个月前
查看原帖
最小生成树克鲁斯卡尔算法。
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=5;
struct node{
	int x,y,z;
};
node a[N];
int f[N];
int xx,yy;
int find(int z){
	if(f[z]==z){
		return z;
	}
	f[z]=find(f[z]);
	return f[z];
}
bool cmp(node l,node r){
	return l.z<r.z;
}
int ans;
int s;
signed main(){
	cin >>xx >>yy;
	for(int i=1; i<=3; i++){
		f[i]=i;
	}
	a[1].x=1;
	a[1].y=2;
	a[1].z=xx;
	a[2].x=2;
	a[2].y=3;
	a[2].z=yy;
	a[3].x=1;
	a[3].y=3;
	a[3].z=INT_MAX;
	sort(a+1,a+3,cmp);
	for(int i=1; i<=3; i++){
		int l=find(a[i].x);
		int r=find(a[i].y);
		if(l!=r){
			f[l]=r;
			ans+=a[i].z;
			s++;
			if(s==2){
				cout <<ans << endl;
			}
		}
	}
	return 0;
}

回复

11 条回复,欢迎继续交流。

正在加载回复...