人人都是好朋友(查並集、數據離散化)

在這裏插入圖片描述
代碼:

#include <bits/stdc++.h>
using namespace std;
int t,n;
const int maxn=5e6+10;
int arr[maxn];
int a[maxn];
int b[maxn];
int c[maxn];
int pre[maxn];
int find(int x)
{
    if(x==pre[x]) return x;
    return pre[x]=find(pre[x]);
}
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        int cnt=0,flag=1;
        for(int i=1;i<=n;++i)
        {
            scanf("%d%d%d",&a[i],&b[i],&c[i]);
            arr[++cnt]=a[i];
            arr[++cnt]=b[i];
        }
        sort(arr+1,arr+1+cnt);
        cnt=unique(arr+1,arr+1+cnt)-arr;
        for(int i=1;i<=n;++i)
        {
            a[i]=lower_bound(arr+1,arr+cnt+1,a[i])-arr;
            b[i]=lower_bound(arr+1,arr+cnt+1,b[i])-arr;
        }
        for(int i=1;i<=cnt;++i)
            pre[i]=i;
        for(int i=1;i<=n;++i)
        {
            if(c[i]==1)
            {
                int u=find(a[i]);
                int v=find(b[i]);
                pre[u]=v;
            }
        }
        for(int i=1;i<=n;++i)
        {
            if(c[i]==0)
            {
                int u=find(a[i]);
                int v=find(b[i]);
                if(u==v)
                {
                    flag=0;
                    break;
                }
            }
        }
        if(flag) puts("YES");
        else puts("NO");
    }
    return 0;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章