灰狼呼喚著同胞 brethren

2022-05-11 00:55:13 字數 1649 閱讀 3873

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

聯通塊用dfs很好求

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

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

資料在管理裡的檔案

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

#include#include

#include

#include

#include

#include

#define mod (998244353)

using

namespace

std;

void read(int &x)

while(i>='

0'&&i<='9')

x*=f;

}int

t,n,m;

struct

node

edge[

2000005

];int size,head[100005],color[100005

],cnt;

void putin(int

from,int to,int

dis)

bool dfs(int

r)

else

}return

ans;

}int

main()

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

;

bool flag=1

;

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

if(!flag)printf("

0\n"

);

else

printf(

"%d\n

",ans);}}

return0;

}

灰狼呼喚著同胞 brethren

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