一件神奇的事
  • 板块灌水区
  • 楼主jjy2023
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/10/24 10:34
  • 上次更新2024/10/24 11:17:18
查看原帖
一件神奇的事
1017497
jjy2023楼主2024/10/24 10:34

这道模板题中,我的数组开 MM 的大小 AC,而开 N(N<M)N(N<M) 的大小会 MLE,问下各位大佬为什么?

我的代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,ans,fa[5005];
struct node
{
	int u,v,len;	
};
node a[200005];
bool cmp(node x,node y)//排序边
{
	return x.len<y.len;
}
int find(int x)//并查集
{
	return x==fa[x]?x:fa[x]=find(fa[x]);
}
void add(int x,int y)//加边
{
	int p=find(x),q=find(y);
	if(p!=q) fa[q]=p;
}
int kruskal()//最小生成树
{
	int sum=0;
	for(int i=1;i<=m;i++)
	{
		int p=find(a[i].u),q=find(a[i].v);
		if(p==q) continue;
		add(a[i].u,a[i].v);
		sum+=a[i].len;
	}
	return sum;
}
bool pd()//图是否连通
{
	int x=0;
	for(int i=1;i<=n;i++) if(fa[i]==i) x++;
	return x==1?true:false;
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		cin>>x>>y>>z;
		a[i].u=x,a[i].v=y,a[i].len=z;
	}
	sort(a+1,a+m+1,cmp);
	ans=kruskal();
	pd()?cout<<ans:cout<<"orz";
	return 0;
}

之前 aa 数组的大小为 50055005 就 MLE 了,但开了 200005200005 就 AC 了,但如果开小了不应该 RE 吗?

2024/10/24 10:34
加载中...