Poj 1703(2sat)

來源:互聯網
上載者:User
Find them, Catch them
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 25758   Accepted: 7780

Description

The police office in Tadu City decides to say ends to the chaos, as launch actions to root up the TWO gangs in the city, Gang Dragon and Gang Snake. However, the police first needs to identify which gang a criminal belongs to.
The present question is, given two criminals; do they belong to a same clan? You must give your judgment based on incomplete information. (Since the gangsters are always acting secretly.)

Assume N (N <= 10^5) criminals are currently in Tadu City, numbered from 1 to N. And of course, at least one of them belongs to Gang Dragon, and the same for Gang Snake. You will be given M (M <= 10^5) messages in sequence, which are in the following two kinds:

1. D [a] [b]
where [a] and [b] are the numbers of two criminals, and they belong to different gangs.

2. A [a] [b]
where [a] and [b] are the numbers of two criminals. This requires you to decide whether a and b belong to a same gang.

Input

The first line of the input contains a single integer T (1 <= T <= 20), the number of test cases. Then T cases follow. Each test case begins with a line with two integers N and M, followed by M lines each containing one message
as described above.

Output

For each message "A [a] [b]" in each case, your program should give the judgment based on the information got before. The answers might be one of "In the same gang.", "In different gangs." and "Not sure yet."

Sample Input

15 5A 1 2D 1 2A 1 2D 2 4A 1 4

Sample Output

Not sure yet.In different gangs.In the same gang.

Source

POJ Monthly--2004.07.18

類似食物鏈那道題,只不過更簡單。首先不能強制給一個人劃歸到一個組織,另一個到另一個組織,這樣做是有後效性的,也就是說你不能確定到底應該是划到哪個組織是正確的。只能確定的條件是如果a是組織1,那麼b是組織2,或a是組織2,b是組織1.這不就是2sat嗎?只是這裡的詢問比較簡單,可以用並查集來實現。每個人也是拆成兩個點,分別代表他在哪個組織中。每來一個條件,就按照2sat的方式加邊,只是這裡的加邊變成了並查集的合并。每個詢問的判斷,就是根據相應的邏輯判斷兩點是否在同一集合即可。

#include<cstdio>#include<algorithm>#include<vector>#include<set>#include<map>#include<iostream>#include<string>#include<cstring>#include<queue>using namespace std;typedef long long LL;const int maxn = 100000 + 5;const int INF = 1000000000;int fa[maxn*2];int Find(int x){return fa[x]==x?x:fa[x]=Find(fa[x]);}int main(){    int n,m;    int t;    scanf("%d",&t);    while(t--){        scanf("%d%d",&n,&m);        for(int i = 1;i <= 2*n;i++) fa[i] = i;        for(int i = 0;i < m;i++){            char s[5];            int x,y;            scanf("%s%d%d",s,&x,&y);            if(s[0] == 'A'){                int X1 = Find(x);                int Y1 = Find(y);                int X2 = Find(x+n);                int Y2 = Find(y+n);                if(X1 == Y2 || X2 == Y1){                    printf("In different gangs.\n");                }                else if(X1 == Y1 || X2 == Y2){                    printf("In the same gang.\n");                }                else{                    printf("Not sure yet.\n");                }            }            else{                int X1 = Find(x);                int Y1 = Find(y);                int X2 = Find(x+n);                int Y2 = Find(y+n);                fa[X1] = Y2;                fa[X2] = Y1;            }        }    }    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.