社区讨论
代码求条
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 条回复,欢迎继续交流。
正在加载回复...