zoukankan      html  css  js  c++  java
  • NOI2015 程序自动分析

    题目链接:戳我

    就是并查集水题.

    
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<map>
    #define MAXN 1000010
    using namespace std;
    int n,T,cnt;
    int fa[MAXN];
    inline int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
    map<int,int>id;
    struct Line{int x,y,op;}line[MAXN];
    inline bool cmp(struct Line a,struct Line b){return a.op>b.op;}
    inline bool check()
    {
        for(int i=1;i<=n;i++)
        {
            int x=id[line[i].x],y=id[line[i].y];
            int a=find(x),b=find(y);
            // printf("x=%d y=%d a=%d b=%d op=%d
    ",x,y,a,b,line[i].op);
            if(line[i].op==0)
            {
                if(a==b) return false;
            }
            else if(line[i].op==1)
            {
                if(a!=b) fa[a]=b;
            }
        }
        return true;
    }
    int main()
    {
        #ifndef ONLINE_JUDGE
        freopen("ce.in","r",stdin);
        #endif
        scanf("%d",&T);
        while(T--)
        {
            cnt=0;
            id.clear();
            scanf("%d",&n);
            // printf("n=%d
    ",n);
            for(int i=1;i<=n;i++)
            {
                int x,y;
                scanf("%d%d%d",&x,&y,&line[i].op);
                if(!id.count(x)) id[x]=++cnt;
                if(!id.count(y)) id[y]=++cnt;
                line[i].x=x,line[i].y=y;
            }
            sort(&line[1],&line[n+1],cmp);
            for(int i=1;i<=cnt;i++) fa[i]=i;
            // printf("cnt=%d
    ",cnt);
            if(check()==true) printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
    
  • 相关阅读:
    阅读代码
    openSips
    rc.local 问题
    MyBatis框架使用(一)
    【数据结构杂谈】
    【AGC052A】
    【杜教筛学习笔记】
    CF618F Double Knapsack
    [NOI2016] 循环之美
    【BZOJ 4668 冷战】
  • 原文地址:https://www.cnblogs.com/fengxunling/p/10947437.html
Copyright © 2011-2022 走看看