在这道模板题中,我的数组开 M 的大小 AC,而开 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;
}
之前 a 数组的大小为 5005 就 MLE 了,但开了 200005 就 AC 了,但如果开小了不应该 RE 吗?