C4top-排座位(並查集)

kewlgrl發表於2017-03-17

排座位   (25分)

佈置宴席最微妙的事情,就是給前來參宴的各位賓客安排座位。無論如何,總不能把兩個死對頭排到同一張宴會桌旁!這個艱鉅任務現在就交給你,對任何一對客人,請編寫程式告訴主人他們是否能被安排同席。

輸入格式:

輸入第一行給出3個正整數:N\le100),即前來參宴的賓客總人數,則這些人從1到N編號;M為已知兩兩賓客之間的關係數;K為查詢的條數。隨後M行,每行給出一對賓客之間的關係,格式為:賓客1 賓客2 關係,其中關係為1表示是朋友,-1表示是死對頭。注意兩個人不可能既是朋友又是敵人。最後K行,每行給出一對需要查詢的賓客編號。

這裡假設朋友的朋友也是朋友。但敵人的敵人並不一定就是朋友,朋友的敵人也不一定是敵人。只有單純直接的敵對關係才是絕對不能同席的。

輸出格式:

對每個查詢輸出一行結果:如果兩位賓客之間是朋友,且沒有敵對關係,則輸出No problem;如果他們之間並不是朋友,但也不敵對,則輸出OK;如果他們之間有敵對,然而也有共同的朋友,則輸出OK but...;如果他們之間只有敵對關係,則輸出No way

輸入樣例:

7 8 4
5 6 1
2 7 -1
1 3 1
3 4 1
6 7 -1
1 2 1
1 4 1
2 3 -1
3 4
5 7
2 3
7 2

輸出樣例:

No problem
OK
OK but...
No way
 
  • 時間限制:150ms
  • 記憶體限制:64MB
  • 程式碼長度限制:16kB
  • 判題程式:系統預設
  • 作者:陳越
  • 單位:浙江大學

題目判定

解題思路:
啊…並查集將朋友放到一起,敵人用二維陣列儲存,查詢的時候根據條件判斷輸出。

解題程式

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iomanip>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 110
#define INF 0x3f3f3f3f
int set[MAXN];
bool e[MAXN][MAXN];//是否敵對
int set_find(int p)
{
    if(set[p]==0)
        return p;
    return set[p]=set_find(set[p]);
}
void join(int p,int q)
{
    int p1,q1;
    p1=set_find(p);
    q1=set_find(q);
    if(p1!=q1)
        set[p1]=q1;
}
int main()
{
#ifdef ONLINE_JUDGE
#else
    freopen("G:/cbx/read.txt","r",stdin);
//freopen("G:/cbx/out.txt","w",stdout);
#endif
    ios::sync_with_stdio(false);
    cin.tie(0);
    memset(&set,0,sizeof(set));
    memset(&e,0,sizeof(e));
    int n,m,q;
    cin>>n>>m>>q;
    for(int i=0; i<m; ++i)//關係
    {
        int a,b,r;
        cin>>a>>b>>r;
        if(r==1) join(a,b);//朋友
        else if(r==-1) e[a][b]=e[b][a]=true;//敵對
    }
    for(int i=0; i<q; ++i)//查詢
    {
        int a,b;
        cin>>a>>b;
        if(set_find(a)==set_find(b)&&!e[a][b]&&!e[b][a]) cout<<"No problem"<<endl;//如果兩位賓客之間是朋友,且沒有敵對關係
        else if(!e[a][b]&&!e[b][a]) cout<<"OK"<<endl;//如果他們之間並不是朋友,但也不敵對
        else if(set_find(a)==set_find(b)&&e[a][b]&&e[b][a]) cout<<"OK but..."<<endl;//如果他們之間有敵對,然而也有共同的朋友
        else cout<<"No way"<<endl;//如果他們之間只有敵對關係
    }
    return 0;
}


相關文章