求助~~
  • 板块学术版
  • 楼主Dawn_Zhang
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/8/5 11:03
  • 上次更新2023/11/3 05:48:29
查看原帖
求助~~
747113
Dawn_Zhang楼主2023/8/5 11:03

题目

我的代码在洛谷可以过,但在别的oj上有一个点内存超限,大佬们帮忙看一下有什么问题,应该是离散化那里出问题了QWQ

#include<bits/stdc++.h> 
using namespace std;
int t,n,cnt,f[2400007],b[3000005];
struct hh{
	int x,y,z;
}a[2400007];
bool cmp(hh a,hh b){
	return a.z>b.z;
}
int find(int x){
	if(f[x]==x)return x;
	return f[x]=find(f[x]);
}
int main(){
	cin>>t;
	while(t--){
		cin>>n;
		cnt=0;
		int v=0;
		memset(b,0,sizeof b);
		memset(a,0,sizeof a);
		memset(f,0,sizeof f);
		for(int i=1;i<=n;i++){
			cin>>a[i].x>>a[i].y>>a[i].z;
			b[++cnt]=a[i].x;
			b[++cnt]=a[i].y;
		}
		sort(b+1,b+cnt+1);
		int tot=unique(b+1,b+cnt+1)-b-1;
		for(int i=1;i<=n;i++){
			a[i].x=lower_bound(b+1,b+tot+1,a[i].x)-b;
			a[i].y=lower_bound(b+1,b+tot+1,a[i].y)-b;
		}
		for(int i=1;i<=tot;i++)f[i]=i;
		sort(a+1,a+n+1,cmp);
		for(int i=1;i<=n;i++){
			int fx=find(a[i].x),fy=find(a[i].y);
			if(a[i].z==1){	
				f[fx]=fy;
			}
			else if(fx==fy){
				v=1;
				cout<<"NO"<<endl;
				break;
			}
		}
		if(v==0){
			cout<<"YES"<<endl;
		}
	}
	return 0;
}
2023/8/5 11:03
加载中...