社区讨论
蒟蒻的脑短路时间
灌水区参与者 2已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mi7xxz7c
- 此快照首次捕获于
- 2025/11/21 05:26 4 个月前
- 此快照最后确认于
- 2025/11/21 05:26 4 个月前
不要问我为什么要做一道并查集水题(问就随机跳题)
为什么在代码的第36行对mp清空会RE,返回值是3221225477
CPP为什么在代码的第36行对mp清空会RE,返回值是3221225477
#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 条回复,欢迎继续交流。
正在加载回复...