为何我第一次程序数组刚好开了5001就MLE
开到500001却又AC了?
原来的程序
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
struct nod{
int x;
int y;
int len;
}f[5001];
int u,v;
int father[5001];
int n,m;
int sum1;
int findzx(int k)
{
if(father[k]==k) return k;
father[k]=findzx(father[k]);
return father[k];
}
bool cmp(nod a,nod b)
{
return a.len<b.len;
}
using namespace std;
int main()
{
cin>>n>>m;
sum1=0;
for(int i=1;i<=n;i++)
father[i]=i;
for(int i=1;i<=m;i++)
scanf("%d %d %d",&f[i].x,&f[i].y,&f[i].len);
sort(1+f,1+f+m,cmp);
for(int i=1;i<=m;i++)
{
u=findzx(f[i].x);
v=findzx(f[i].y);
if(u!=v)
{
father[u]=v;
sum1=sum1+f[i].len;
}
}
cout<<sum1<<endl;
return 0;
}
改后的程序
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
struct nod{
int x;
int y;
int len;
}f[500001];
int u,v;
int father[500001];
int n,m;
int sum1;
int findzx(int k)
{
if(father[k]==k) return k;
father[k]=findzx(father[k]);
return father[k];
}
bool cmp(nod a,nod b)
{
return a.len<b.len;
}
using namespace std;
int main()
{
cin>>n>>m;
sum1=0;
for(int i=1;i<=n;i++)
father[i]=i;
for(int i=1;i<=m;i++)
scanf("%d %d %d",&f[i].x,&f[i].y,&f[i].len);
sort(1+f,1+f+m,cmp);
for(int i=1;i<=m;i++)
{
u=findzx(f[i].x);
v=findzx(f[i].y);
if(u!=v)
{
father[u]=v;
sum1=sum1+f[i].len;
}
}
cout<<sum1<<endl;
return 0;
}
这难道是BUG吗?