记录编号 588575 评测结果 AAAAAAAAAA
题目名称 [NOI 2015]程序自动分析 最终得分 100
用户昵称 Gravatar小金 是否通过 通过
代码语言 C++ 运行时间 1.814 s
提交时间 2024-06-06 11:44:36 内存使用 4.74 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
map<int,int> ys;
int t,n,f[2*N],cnt,cz[N][3]; 
int find(int x)
{
    if(f[x]==x)
    {
        return x;
    }
    else
    {
        return f[x]=find(f[x]);
    }
}
void un(int x,int y)
{
    int fx=find(x);
    int fy=find(y);
    if(fx!=fy)
    {
        f[fx]=fy;
    }
}
int main()
{
    freopen("prog.in","r",stdin);
    freopen("prog.out","w",stdout);
    scanf("%d",&t);
    while(t--)
    {
        cnt=0;
        ys.clear();
        memset(f,0,sizeof(f));
        scanf("%d",&n);
        for(int i=1;i<=2*n;i++)
        {
            f[i]=i;
        }
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d%d",&cz[i][1],&cz[i][2],&cz[i][0]);
            if(ys[cz[i][1]]==0)
            {
                cnt++;
                ys[cz[i][1]]=cnt;
            }
            if(ys[cz[i][2]]==0)
            {
                cnt++;
                ys[cz[i][2]]=cnt;
            }
            cz[i][1]=ys[cz[i][1]];
            cz[i][2]=ys[cz[i][2]];
            if(cz[i][0]==1)
            {
                un(cz[i][1],cz[i][2]);
            }
        }
        int flag=1;
        for(int i=1;i<=n;i++)
        {
            if(cz[i][0]==0)
            {
                if(find(cz[i][1])==find(cz[i][2]))
                {
                    flag=0;
                }
            }
        }
        if(flag==1)
        {
            printf("YES\n");
        }
        else
        {
            printf("NO\n");
        }
    }
    return 0;
}