社区讨论
预期20 实际0
P14080[GESP202509 八级] 最小生成树参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhj1y855
- 此快照首次捕获于
- 2025/11/03 19:24 4 个月前
- 此快照最后确认于
- 2025/11/03 19:24 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
struct graph
{
int u,v,w,x;
}a[200001];
int f[200001];
int n,m,k;
bool e(graph x,graph y)
{
return x.w<y.w;
}
int find(int q)
{
if(f[q]==q)
{
return f[q];
}
return f[q]=find(f[q]);
}
int kruskal(int s)
{
int sum=0;
for(int i=1;i<=n;i++)
{
f[i]=i;
}
for(int i=1;i<=m;i++)
{
if(a[i].x!=s)
{
int x=find(a[i].u),y=find(a[i].v);
if(x!=y)
{
sum+=a[i].w;
f[x]=y;
k++;
if(k==n-1)
{
break;
}
}
}
}
if(k<n-1)
{
sum=-1;
}
return sum;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i].u>>a[i].v>>a[i].w;
a[i].x=i;
}
sort(a+1,a+m+1,e);
int temp=kruskal(0);
for(int i=1;i<=m;i++)
{
int sum=kruskal(i);
cout<<(sum>=temp?sum:-1)<<endl;
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...