社区讨论
90分并查集求助!!
P1195口袋的天空参与者 4已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo9mr8rz
- 此快照首次捕获于
- 2023/10/28 13:57 2 年前
- 此快照最后确认于
- 2023/10/28 13:57 2 年前
CPP
#include <bits/stdc++.h>
using namespace std;
int father[50005];
int isroot[50005];
struct way{
int x,y,z;
}a[100005];
int findfather(int x) {
int a=x;
while(x!=father[x])
x=father[x];
while(a!=father[a]) {
int z=a;
a=father[a];
father[z]=x;
}
}
void Union(int x,int y) {
int faX=findfather(x);
int faY=findfather(y);
if(faX!=faY)
father[faX]=faY;
}
void init(int n) {
for(int i=1; i<=n; i++) {
isroot[i]=false;
father[i]=i;
}
}
bool cmp(way a ,way b){
return a.z<b.z;
}
int main() {
int n,m,k,time=0;
cin>>n;
// if(n==0) break;
cin>>m>>k;
init(n);
int z,x,y;
for(int i=1; i<=m; i++) {
cin>>a[i].x>>a[i].y>>a[i].z;
}
// cout<<n-1<<endl;
sort(a ,a+m+1 , cmp);
// for(int i=1;i<=m;i++) cout<<a[i].z<<" ";
for(int i=1;i<=m;i++){
if(findfather(a[i].x)!=findfather(a[i].y)) {
Union(a[i].x,a[i].y);
n--;
time+=a[i].z;
}
if(n==k) {
cout<<time;return 0;
}
}
cout<<"No Answer";
// cout<<"-1";
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...