POJ 1733パリティゲーム(互いに素セット拡張フィールド)

トピックリンク:こちらをクリックしてください

ここに画像を挿入説明
ここに画像を挿入説明

質問の意味:

エントリー n個 n個 長さを表します n個 n個 0 1 0,1 列、 メートル メートル そこ表し、 メートル メートル ライン入力、次 メートル メートル 行入力 バツ E v e n X、Y、偶数 表し x バツ 最初に y 文字の真ん中 1 1 の数が偶数です。 x , y , o d d X、Y、奇数 表します x バツ 最初に y 文字の真ん中 1 1 奇数です。もし m メートル 最初の文 k + 1 K + 1 矛盾の言葉で初めて正面、出力されます k K

アイデアの分析:

x バツ を表し x バツ 、でもこの状態にあります x + n X + N 表し x バツ 奇数の状態すなわち

x , y X、Y 同じです

  1. もし x バツ 奇数です、 y 奇数であります
  2. もし x バツ 偶数で、 y 偶数であります

x , y X、Y 不均一です

  1. もし x バツ 偶数で、 y 奇数であります
  2. もし x バツ 奇数です、 y 偶数であります

理解します:

サイドバンド権互いに素セット: x バツ y どのような関係があることはどのくらいの量に依存するように、彼らは同じコレクションであり、関連しています

互いに素セットの拡張フィールド:長い条件が真である限り、コレクションは、その後、残りのすべての条件が必然的に確立しました。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>

using namespace std;
const int N = 40010, base = N / 2;

int n, m;
int p[N];
map<int,int> mp;

int get(int x)          // 在线离散化
{
    if(mp.count(x) == 0)    mp[x] = ++n;
    return mp[x];
}

int find(int x)
{
    if(x != p[x])   p[x] = find(p[x]);
    return p[x];
}

int main()
{
    scanf("%d%d", &n, &m);
    
    n = 0;      // 用于离散化
    
    for(int i = 1; i < N; ++i)  p[i] = i;   // 初始化
    
    int res = m;
    for(int i = 1; i <= m; ++i)
    {
        int a, b;
        char op[6];
        scanf("%d%d%s", &a, &b, op);
        
        if(res != m)    continue;
        
        a = get(a - 1), b = get(b);
        
        if(op[0] == 'e')                  // 同类
        {
            if(find(a + base) == find(b))  // 有矛盾
            {
                res = i - 1;
                break;					// 数据没有输入完,可以break
            }
            p[find(a)] = find(b);
            p[find(a + base)] = find(b + base);
        }
        else                            // 异类
        {
            if(find(a) == find(b))      // 有矛盾
            {
                res = i - 1;
                break;
            }
            p[find(a)] = find(b + base);
            p[find(a + base)] = find(b);
        }
    }
    
    printf("%d\n", res);
    
    return 0;
}
844元記事公開 ウォンの賞賛135 ビュー150,000 +を

おすすめ

転載: blog.csdn.net/qq_42815188/article/details/105158828