集合的合併與維護和食物鏈那道題一樣。
不過多了個裁判。注意到n<=500,所以可以列舉裁判,然後判斷是否出現了矛盾。(忽略裁判)
如果有矛盾,則這個人不是裁判。
唯一有點難度的是輸出第幾行判斷出的裁判。
原先以為是最後出現裁判的那一行。
後來發現應當時列舉其他人時候首次出現矛盾的最大值。(仔細想想)
這樣這道題就解決了。
【**】
[cpp]
#include
#include
#include
#include
#include
using namespace std;
const int n=505,m=2005;
int fa[n],r[n],x[m],y[m],z[m];
int n,m,k,kk,ans;
int find(int x)
int main()
ans=k=kk=0;
for (j=0;j
for (i=1;i<=m;i++)
else if ((r[x[i]]-r[y[i]]+3)%3!=z[i])
} if (ff)
} if (ans==0) printf("impossible\n");
else if (ans>1) printf("can not determine\n");
else printf("player %d can be determined to be the judge after %d lines\n",k,kk);
} } 作者:ascii991
並查集練習
題目描述 假如已知有n個人和m對好友關係 存於數字r 如果兩個人是直接或間接的好友 好友的好友的好友 則認為他們屬於同乙個朋友圈,請寫程式求出這n個人裡一共有多少個朋友圈。假如 n 5 m 3 r 表示有5個人,1和2是好友,2和3是好友,4和5是好友,則1 2 3屬於乙個朋友圈,4 5屬於另乙個朋...
並查集 並查集
本文參考了 挑戰程式設計競賽 和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 ...
並查集入門(普通並查集 帶刪除並查集 關係並查集)
什麼是並查集?通俗易懂的並查集詳解 普通並查集 基礎並查集 例題 題解 how many tables problem description lh boy無聊的時候很喜歡數螞蟻,而且,還給每乙隻小螞蟻編號,通過他長期的觀察和記錄,發現編號為i的螞蟻會和編號為j的螞蟻在一起。現在問題來了,他現在只有...