社区讨论

救命啊,次小生成树着火了

学术版参与者 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 条回复,欢迎继续交流。

正在加载回复...