社区讨论

蒟弱求救!

P1111修复公路参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mi86jfg8
此快照首次捕获于
2025/11/21 09:26
4 个月前
此快照最后确认于
2025/11/21 09:26
4 个月前
查看原帖
CPP
#include<cstdio>
#include<vector>
#include<cstring>
#include<queue>
#include<algorithm>

using namespace std;
const int Maxn=5010,maxn=200010;
struct Edge{
	int from,to;
	int num=100010;
	  
}edge[2*maxn];
 
int father[Maxn];
int i,j,m,head=1,n,u,v,w,s=1,dis[Maxn],max_=0;
bool cmp(Edge a,Edge b)
	{
		return a.num<b.num;
	}
void ibigin()
{
	for(i=1;i<=n;i++)
	   father[i]=i;
}
int ifind(int x)
{
	if(father[x]==x)
	    return x;
	father[x]=ifind(father[x]);
	return father[x];
}
void ijoin(int a,int b)
{
	if(ifind(a)!=ifind(b))
	    father[ifind(a)]=father[b];
}
void input()
{
	scanf("%d %d",&n,&m);
	for(i=1;i<=m;i++)
	{
		scanf("%d %d %d",&u,&v,&w);
		edge[head].from=u,edge[head].to=v,edge[head].num=w;
		head++;
        edge[head].to=u,edge[head].from=v,edge[head].num=w;
        head++;
	} 
}
void kruskal()
{
	ibigin();
	while(s<n&&head<=m)
	{
		if(ifind(edge[head].from)!=ifind(edge[head].to))
		{
			ijoin(edge[head].from,edge[head].to);
			dis[s++]=edge[head].num;
		}
		head++;
	}
}
int main()
{
	memset(dis,-1,sizeof(dis));
	input();
	head=1;
	sort(edge,edge+maxn,cmp);
	kruskal();
	for(i=1;i<n;i++)
	{
	    if(dis[i]==-1)
	    {
	        printf("-1");
	        return 0;
	    }
	    if(dis[i]>max_) max_=dis[i];
	}
	printf("%d ",max_);
	return 0;
}
代码如上,90,求救

回复

3 条回复,欢迎继续交流。

正在加载回复...