zoukankan      html  css  js  c++  java
  • Parity game POJ

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    const int N=10010<<1;
    struct node
    {
        int l,r,ans;
    } q[N];
    int a[N],fa[N],d[N],n,m,t_n;
    int get(int x)
    {
        if (x==fa[x])
            return x;
        int root=get(fa[x]);
        d[x]^=d[fa[x]];//异或
        return fa[x]=root;
    }
    inline int read_init()//离散化
    {
        cin>>n>>m;
        for(int i=1;i<=m;i++)
        {
            char str[5];
            scanf("%d%d%s",&q[i].l,&q[i].r,str);
            q[i].ans=(str[0]=='e'?0:1);
            a[++t_n]=q[i].l-1;
            a[++t_n]=q[i].r;
        }
        sort(a+1,a+1+t_n);
        n=unique(a+1,a+1+t_n)-a-1;//去重
    }
    inline int work()
    {
        read_init();
        for(int i=1;i<=n;i++)
            fa[i]=i;
        for(int i=1;i<=m;i++)
        {
            int x=lower_bound(a+1,a+1+n,q[i].l-1)-a;//离散化后要找数
            int y=lower_bound(a+1,a+1+n,q[i].r)-a;
            int p=get(x),q2=get(y);
            if (p==q2)
            {
                if ((d[x]^d[y])!=q[i].ans)//变量要相等,但是却不相等了.
                {
                    cout<<i-1<<endl;
                    return 0;
                }
            } 
            else
            {
                fa[p]=q2;
                d[p]^=d[x]^d[y]^q[i].ans;//统统异或
            }
        }
        cout<<m<<endl;
    }
    int main()
    {
        work();
        return 0;
    }
  • 相关阅读:
    汉诺塔
    协变和逆变随笔
    NetCore开发第一步 Log4Net日志引入
    插入排序算法
    选择排序算法
    冒泡排序算法
    排序算法
    线性链表
    SAN
    SAM -- Chap 8 提升方法 自我梳理
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12249925.html
Copyright © 2011-2022 走看看