時間限制
150 ms
記憶體限制
65536 kb
**長度限制
8000 b
判題程式
standard
作者 陳越
布置宴席最微妙的事情,就是給前來參宴的各位賓客安排座位。無論如何,總不能把兩個死對頭排到同一張宴會桌旁!這個艱鉅任務現在就交給你,對任何一對客人,請編寫程式告訴主人他們是否能被安排同席。
輸入格式:
輸入第一行給出3個正整數:n(<= 100),即前來參宴的賓客總人數,則這些人從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 45 7
2 37 2
no problem並查集okok but...
no way
#include#include#include#includeusing namespace std;
int f[105];
int map[105][105];
int find_set(int x)
void union(int x,int y)//合併
int main()
int judge1,judge2;
for(i=0;i>judge1>>judge2;
if(map[judge1][judge2]==1)//
cout<<"no problem"《寫這道題的時候好多人剛開始都對人數進行了預判來剪枝,因為這個錯了很多遍,我寫的時候本來也想把剪枝寫上,但寫著寫著忘了也沒加,反倒直接對了。
按理說加剪枝更好,不懂這個梗啊。。
#include#include#include#include#includeusing namespace std;
int f[5005];
int find_set(int x)
void unio(int x,int y)
int main()
}if(h==1)
break;
}if(h==1)
break;}}
else
h=1;
}if(h==0)
printf("great team!\n");
else
printf("bad team!\n");
}return 0;
}
並查集 並查集
本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...
並查集相關習題總結 上
學習kruskal的時候我們學習了並查集,那時候都是不帶權值的。今天找了一些並查集的題目寫了下,寫題時也參考了大牛的部落格 1.rank of tetris 如下 include include include include include include include include incl...
並查集入門(普通並查集 帶刪除並查集 關係並查集)
什麼是並查集?通俗易懂的並查集詳解 普通並查集 基礎並查集 例題 題解 how many tables problem description lh boy無聊的時候很喜歡數螞蟻,而且,還給每乙隻小螞蟻編號,通過他長期的觀察和記錄,發現編號為i的螞蟻會和編號為j的螞蟻在一起。現在問題來了,他現在只有...