代码换位导致MLE
  • 板块学术版
  • 楼主gemaymini
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/28 18:08
  • 上次更新2024/10/28 20:18:08
查看原帖
代码换位导致MLE
1541424
gemaymini楼主2024/10/28 18:08

为什么将37行的for放到36行的sort函数,第二个测试集会MLE

#include<bits/stdc++.h>
using namespace std;
int t,n,x,y,k;
struct node{
	int a;
	int b;
	int e;
	bool operator<(const node& one){
		return e>one.e;
	}
}a[100005];
int f[100005];
int b[100005<<1];

int find(int x){
	return f[x]==x?x:(f[x]=find(f[x]));
}
void check(){
	memset(a,0,sizeof(a));
	memset(f,0,sizeof(f));
	memset(b,0,sizeof(b));
	cin>>n;
	int num=0;
	for(int i=1;i<=n;i++){
		cin>>a[i].a>>a[i].b>>a[i].e;
		b[++num]=a[i].a;
		b[++num]=a[i].b;
	}
	sort(b+1,b+num+1);
	int index=unique(b+1,b+num+1) - b;
	for(int i=1;i<=n;i++){
		a[i].a=lower_bound(b+1,b+index+1,a[i].a)-b;
		a[i].b=lower_bound(b+1,b+index+1,a[i].b)-b;
	}

	sort(a+1,a+n+1);
	for(int i =1;i<=index;i++){
		f[i]=i;
	}
	for(int i =1;i<=n;i++){
		int pa=find(a[i].a);
		int pb=find(a[i].b);
		if(a[i].e==1){
			if(pa!=pb){
				f[pb]=pa;
			}
		}else{
			if(pa==pb){
				cout<<"NO"<<endl;
				return; 
			}
		}
	}
	cout<<"YES"<<endl;
	
}

int main(){
	cin>>t;
	while(t--){
		check();
	}
}
2024/10/28 18:08
加载中...