神奇的MLE?
查看原帖
神奇的MLE?
66263
Jack_cjj楼主2020/8/11 22:20

为何我第一次程序数组刚好开了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吗?

2020/8/11 22:20
加载中...