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;
    }
    
  • 相关阅读:
    文档API
    vi编辑器常用方法
    storm实战入门一
    redis教程
    为redis分配一个新的端口
    Lucene分页查询
    Lucene搜索方式大合集
    HBase Scan类用法
    java.util.Queue用法
    Makefile中预定义变量
  • 原文地址:https://www.cnblogs.com/fengxunling/p/10947437.html
Copyright © 2011-2022 走看看