社区讨论
90pts玄关求助 码风良好
P1195口袋的天空参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @m3sjjtmj
- 此快照首次捕获于
- 2024/11/22 17:30 去年
- 此快照最后确认于
- 2024/11/22 19:48 去年
CPP
#include<bits/stdc++.h>
using namespace std;
const int MAXN=595950;
int n,m,k;
int cnt,ans;
int father[MAXN];
struct Edge{//定义结构体
int a;//起点
int b;//终点
int w;//边权
}f[MAXN];
bool cmp(Edge a,Edge b){//sort排序规则,按费用从低到高排序
return a.w<b.w;
}
int fath(int x){
if(father[x]!=x) father[x]=fath(father[x]);
return father[x];
}
void unionn(int x,int y){
int fa=fath(x);
int fb=fath(y);
if(fa!=fb) father[fa]=fb;
}
int main(){
cin>>n>>m>>k;//点的个数,边的数量,要连多少条边
for(int i=1;i<=n;i++){
father[i]=i;
}
for(int i=1;i<=m;i++){
cin>>f[i].a>>f[i].b>>f[i].w;
}
sort(f,f+m+1,cmp);
for(int i=1;i<=m;i++){
if(fath(f[i].a)!=fath(f[i].b)){
unionn(f[i].a,f[i].b);
ans+=f[i].w;
cnt++;
}
if(cnt>=n-k){
break;
}
}
if(cnt>=n-k){
cout<<ans<<endl;
}else{
cout<<"No Answer"<<endl;
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...