社区讨论

蒟蒻的脑短路时间

灌水区参与者 2已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@mi7xxz7c
此快照首次捕获于
2025/11/21 05:26
4 个月前
此快照最后确认于
2025/11/21 05:26
4 个月前
查看原帖
不要问我为什么要做一道并查集水题(问就随机跳题)
为什么在代码的第36行对mp清空会RE,返回值是3221225477
CPP
#include<bits/stdc++.h>
using namespace std;
inline long long read()
{
    long long num=0,fs=1;
    char ch;
    while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
    if(ch=='-') fs=-1,ch=getchar();
    while(ch>='0'&&ch<='9') num=num*10+ch-'0',ch=getchar();
    return num*fs;
}
int T;
int n;
int fa[100009];
map<int,int> mp;
int a[200009];
int adx[200009],ady[200009];
int qyx[200009],qyy[200009];
int find(int x)
{
	if(fa[x]==x) return x;
	return fa[x]=find(fa[x]);	
}
int main()
{
	cin>>T;
    while(T--)
    {
    	for(int i=1;i<=200000;i++)
    	{
    		fa[i]=i;
    	}	
    	adx[0]=qyx[0]=0;
    	a[0]=0;
    	cout<<233;
    	mp.clear();
    	cout<<233;
		n=read();
		for(int i=1,opt,x,y;i<=n;i++)
		{
			x=read(),y=read(),opt=read();
			//cout<<x<<" "<<y<<" "<<opt<<endl;
			if(opt==1)
			{
				adx[0]++;
				adx[adx[0]]=x;
				ady[adx[0]]=y;
			}
			else
			{
				qyx[0]++;
				qyx[qyx[0]]=x;
				qyy[qyx[0]]=y;
			}
			//cout<<233<<" "<<mp[0];
			if(mp[x]==0)
			{
				mp[x]=1;
				a[++a[0]]=x;	
			}
			if(mp[y]==0)
			{
				mp[y]=1;
				a[++a[0]]=y;	
			}
			
		}
		sort(a+1,a+a[0]+1);
		for(int i=1;i<=a[0];i++)
		{
			mp[a[i]]=i;	
		}
		for(int i=1;i<=adx[0];i++)
		{
			adx[i]=mp[adx[i]];	
			ady[i]=mp[ady[i]];	
		}
		for(int i=1;i<=qyx[0];i++)
		{
			qyx[i]=mp[qyx[i]];	
			qyy[i]=mp[qyy[i]];	
		}
		for(int i=1;i<=adx[0];i++)
		{
			fa[find(adx[i])]=find(ady[i]);	
		}
		bool kx=1;
		for(int i=1;i<=qyx[0];i++)
		{
			if(find(qyx[i])==find(qyy[i]))
			{
				kx=0;
				break;
			}
		}
		if(kx) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
    }
    return 0;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...