題意: 有t組測試資料, 對於每組資料,第一行n, m分別表示昆蟲的數目和接下來m行x, y,
x, y表示教授判斷x, y為異性, 問教授是否有錯誤判斷,即存在x, y為同性;
這道題和poj1703類似, 不過更簡單一點 (poj1703題解)
解法1: 我們可以用rank[x]記錄x與其父親節點的關係, rank[x]=0表同性, rank[x]=1表異性;
假設前面的教授判斷都是正確的, 若後面存在與前面判斷矛盾的資料,那麼教授判斷有誤;
**:
1 #include 2 #include 3#define maxn 2010
4using
namespace
std;56
int rank[maxn], pre[maxn]; //
***rank[x]儲存x與其父親節點的關係78
int find(int x)
14return
pre[x];15}
1617
int jion(int x, int
y)else
26 }else
30return0;
31}3233
int main(void)42
int flag=0;43
while(m--)49}
50if
(flag)else55}
56return0;
57 }
解法2: 並查集裡面合併同一性別的昆蟲, 用n+x表示與x性別相反的昆蟲
**:
1 #include 2 #include 3#define maxn 2010
4using
namespace
std;56
int pre[maxn*2];7
8int find(int x)
1112
void jion(int x, int y)18}
1920
int main(void)28
int flag=0;29
while(m--)else38}
39if
(flag)else44}
45return0;
46 }
解法3: 用vis陣列標記, vis[x]儲存與x性別不同的昆蟲
**:
1 #include 2 #include 3#define maxn 2010
4using
namespace
std;56
int pre[maxn*2], vis[maxn*2];7
8int find(int x)
1112
void jion(int x, int y)18}
1920
int main(void)29
int flag=0;30
while(m--)else
if(vis[x]+vis[y]==0)else
if(!vis[x])else
if(!vis[y])else48}
49if
(flag)else54}
55return0;
56 }
Poj2492 帶權並查集
題目鏈結在這裡 題目大意 bug分公母,有n個bug,m個描述,每個描述裡有x和y,代表這兩個bug是一對。問給出m個描述之後會不會有同性戀現象。解題思路 每個bug的權值初始時設定成0,權值代表著這個bug和其祖宗的性別差異,如果是1就表示是異性,0代表同性。然後在合併的時候,如果發現它們之前已經...
poj1182 種類並查集
有點坑的題目,不過做做絕對利大於弊,尤其在你不斷wa到哭的時候,大神忽略這句 0 兩者相同級別 1 被根節點吃 2 吃根節點 原因 對於輸入的關係1和2,減1之後便是輸入的兩個量之間的關係 其實是寫完題目之後看解題報告發現這規律的 include include using namespace st...
POJ 1703 種類並查集
題意 乙個城市裡面有兩個黑幫 有兩種操作 a ask 詢問 x,y的關係 d x,y是一夥的 很明顯是種類並查集 於是就yy一下 relationsi 表示與父節點的關係 fatheri 記錄父節點 在合併和查詢root的時候 relations 更新注意一下就可以了 include include...