灰狼呼喚著同胞 brethren

2022-05-11 23:23:08 字數 1510 閱讀 7668

先求出確定邊的聯通塊,有cnt塊,顯然方案數為2^(cnt-1)

聯通塊用dfs很好求

但此題還有並查集解法,且與一道叫團夥的題很像

邊為0為敵人,1為朋友,敵人的敵人是朋友,朋友的朋友是朋友,正好對應本題情況

資料在管理裡的檔案

現附上dfs版(並查集還沒寫)

1 #include2 #include3 #include4 #include5

using

namespace

std;

6struct

node

7edge[2000001

];10

int head[100001],num,col[100001

],n,m,cnt;

11long

long

ans;

12bool

ok;13

void add(int u,int v,int

d)14

21void dfs(int

x)22

31else

3236}37

}38intmain()

39 51

for (i=1;i<=n;i++) col[i]=-1

;52 ok=1;53

for (i=1;i<=n;i++)

54if (col[i]==-1)55

60 ans=1;61

if (!ok) printf("

0\n"

);62

else

6368

}69 }

灰狼呼喚著同胞 brethren

先求出確定邊的聯通塊,有cnt塊,顯然方案數為2 cnt 1 聯通塊用dfs很好求 但此題還有並查集解法,且與一道叫團夥的題很像 邊為0為敵人,1為朋友,敵人的敵人是朋友,朋友的朋友是朋友,正好對應本題情況 資料在管理裡的檔案 現附上dfs版 並查集還沒寫 include include inclu...