社区讨论
20pts,听取TLE声一片,有什么优化方法吗
P14080[GESP202509 八级] 最小生成树参与者 3已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mm76kau2
- 此快照首次捕获于
- 2026/03/01 11:18 上周
- 此快照最后确认于
- 2026/03/03 19:35 上周
rt
CPP#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10,maxm=1e5+10;
int fa[maxn];
int get(int x)
{
if(x==fa[x])return x;
return fa[x]=get(fa[x]);
}
void _merge_(int x,int y)
{
int rx=get(x),ry=get(y);
if(rx==ry)return;
fa[rx]=ry;
}
struct tree
{
int u;
int v;
int w;
}a[maxm];
struct tree2
{
int u;
int v;
int w;
}b[maxm];
bool cmp(tree x,tree y)
{
return x.w<y.w;
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i].u>>a[i].v>>a[i].w;
b[i].u=a[i].u,b[i].v=a[i].v,b[i].w=a[i].w;
}
for(int i=1;i<=n;i++)fa[i]=i;
sort(a+1,a+m+1,cmp);
for(int i=1;i<=m;i++)
{
long long ans=0;
for(int j=1;j<=n;j++)fa[j]=j;
for(int j=1;j<=m;j++)
{
if(b[i].u==a[j].u&&b[i].v==a[j].v&&b[i].w==a[j].w)continue;
if(get(a[j].u)!=get(a[j].v))
{
_merge_(a[j].u,a[j].v);
ans+=a[j].w;
}
}
int cnt=0;
for(int j=1;j<=n;j++)
{
if(get(j)==j)
{
cnt++;
}
}
if(cnt==1)cout<<ans<<"\n";
else cout<<-1<<"\n";
}
return 0;
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...