并查集+离散化
Posted 钟钟终
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并查集+离散化相关的知识,希望对你有一定的参考价值。
#952. 程序自动分析
再也不想用memset了,总超时,改了好久,有点小烦!!!
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=4e6+5;
int n,f[N],d[N],cnt;
bool flag;
struct node
int x,y,z;
bool operator<(const node &a)const
return z>a.z;
e[N];
int r_find(int r)
if(r==f[r])return f[r];
f[r]=r_find(f[r]);
return f[r];
signed main()
int t;scanf("%lld",&t);
while(t--)
cnt=flag=0;
scanf("%lld",&n);
for(int i=1;i<=n*2;i++)
f[i]=i;
for(int i=1;i<=n;i++)
scanf("%lld%lld%lld",&e[i].x,&e[i].y,&e[i].z);
d[++cnt]=e[i].x;
d[++cnt]=e[i].y;
sort(d+1,d+cnt+1);
sort(e+1,e+n+1);
int temp=unique(d+1,d+cnt+1)-d-1;
for(int i=1;i<=n;i++)
if(e[i].z)
int a=lower_bound(d+1,d+1+temp,e[i].x)-d;
int b=lower_bound(d+1,d+1+temp,e[i].y)-d;
int fx=r_find(a),fy=r_find(b);
f[fx]=fy;
else
int a=lower_bound(d+1,d+1+temp,e[i].x)-d;
int b=lower_bound(d+1,d+1+temp,e[i].y)-d;
int fx=r_find(a),fy=r_find(b);
if(fx==fy)
flag=1;break;
if(flag)
printf("NO\\n");
else
printf("YES\\n");
return 0;
以上是关于并查集+离散化的主要内容,如果未能解决你的问题,请参考以下文章