社区讨论
救命啊,次小生成树着火了
学术版参与者 5已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mi7xl284
- 此快照首次捕获于
- 2025/11/21 05:16 4 个月前
- 此快照最后确认于
- 2025/11/21 05:16 4 个月前
C
#include<bits/stdc++.h>
using namespace std;
long long n,m,book[30006],tree=0,head[1006],cmax[1006][1006],end[1006],next[1006],fa[1006],mnm=0,minn=0x7ffffff;
struct node
{
long long from,to,value;
}edge[30006];
int cmp(node x,node y)
{
return x.value<y.value;
}
int find(int x)
{
while(x!=fa[x]) x=fa[x];
return fa[x];
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
scanf("%d%d%d",&edge[i].from,&edge[i].to,&edge[i].value);
sort(edge+1,edge+1+m,cmp);
for(int i=1;i<=n;i++)
fa[i]=i,end[i]=i,next[i]=0,head[i]=i;
for(int i=1;i<=m;i++)
{
int k1=find(edge[i].from);
int k2=find(edge[i].to);
if(k1==k2) continue;
tree+=edge[i].value;
book[i]=1;
for(int j=head[k1];j;j=next[j])
for(int k=head[k2];k;k=next[k])
cmax[j][k]=cmax[k][j]=edge[i].value;
next[end[head[k1]]]=head[k2];
end[head[k1]]=end[head[k2]];
fa[k2]=fa[k1];
mnm++;
if(mnm==n-1) break;
}
for(int i=1;i<=m;i++)
if(book[i]) continue;
else
minn=min(minn,tree+edge[i].value-cmax[edge[i].from][edge[i].to]);
cout<<minn;
return 0;
}
额,洛谷大佬好像没有秘密的牛奶运输这个题。
一直运行错误,没办法呀!!!
秘密的牛奶运输,可以在ybt.ssoier.cn:8088,图论里找到。大佬救命
回复
共 5 条回复,欢迎继续交流。
正在加载回复...