bzoj3444: 最後的晚餐(並查集+組合數學)
題目傳送門
。
解法:
並查集維護要挨在一起的人啊。
假設現在有tt段人要挨在一起。
然後這tt段人一共有t個人。
那麼其實只有n-t+tt個點在參與排序。
全排列就好。
然後每一段都可以倒過來。
所以最後要乘2^tt
判0其實蠻好判斷。
如果一個點的度>2的話那麼輸出0
或者當前這兩個點已經在同一個集裡面的話那肯定是衝突的啦(這是在我想了很多組資料猛然發現的)
程式碼實現:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
typedef long long ll;
int fa[510000];int findfa(int x) {if(x!=fa[x])fa[x]=findfa(fa[x]);return fa[x];}const ll mod=989381;
bool v[510000];int sum[510000];
ll pow_mod(int b) {
ll a=2;
ll ans=1;while(b!=0) {if(b%2==1)ans=ans*a%mod;a=a*a%mod;b/=2;}
return ans;
}
int s[510000];bool guding[510000];
int main() {
memset(v,false,sizeof(v));int n,m;scanf("%d%d",&n,&m);int t=0;
for(int i=1;i<=n;i++)fa[i]=i;memset(guding,false,sizeof(guding));
for(int i=1;i<=m;i++) {
int x,y;scanf("%d%d",&x,&y);
int xx=findfa(x),yy=findfa(y);
s[x]=y;if(s[y]==x)continue;
if(xx==yy){printf("0\n");return 0;}
if(xx!=yy)fa[xx]=yy;sum[x]++;sum[y]++;
if(sum[x]>2||sum[y]>2) {printf("0\n");return 0;}
if(v[x]==false) {v[x]=true;t++;}if(v[y]==false) {v[y]=true;t++;}
}
for(int i=1;i<=n;i++)fa[i]=findfa(i);
memset(v,false,sizeof(v));int tt=0;
for(int i=1;i<=n;i++) if(v[fa[i]]==false&&sum[i]!=0) {v[fa[i]]=true;tt++;}
ll ans=1;for(ll i=2;i<=n-t+tt;i++) ans=ans*i%mod;
printf("%lld\n",ans*pow_mod(tt)%mod);
return 0;
}
相關文章
- 【數學】組合數學 - 排列組合
- 組合數學
- 《小 學 組 合 數 學》
- 【數學】組合數學 - 卡特蘭數
- 藍橋杯-並查集-合根植物並查集
- 【並查集】【帶偏移的並查集】食物鏈並查集
- 組合數學筆記-排列與組合筆記
- 並查集到帶權並查集並查集
- 並查集(一)並查集的幾種實現並查集
- 【組合數學】組合數學簡介 ( 組合思想 2 : 數學歸納法 | 數學歸納法推廣 | 多重歸納思想 )
- 使用並查集處理集合的合併和查詢問題並查集
- 並查集的使用並查集
- 【學習筆記】組合數學筆記
- 組合數學學習筆記筆記
- 不學無數——組合模式模式
- 組合數學 XKerror 筆記Error筆記
- Codeforces 455C Civilization:樹的直徑 + 並查集【合併樹後直徑最小】並查集
- 【演算法學習】組合數學演算法
- 並查集(二)並查集的演算法應用案例上並查集演算法
- 【學習筆記】並查集應用筆記並查集
- 一本組合學習題集——《組合問題與練習》
- 並查集的應用並查集
- 3.1並查集並查集
- 並查集(小白)並查集
- POJ 1611-The Suspects(並查集-同一集合)並查集
- 組合數學筆記-特殊計數數列筆記
- 組合數學水題 $19$ 道
- BZOJ 3673 可持久化並查集 by zky 可持續化線段樹+並查集啟發式合併持久化並查集
- [演算法學習筆記] 並查集演算法筆記並查集
- 【POJ 2249】 Binomial Showdown 組合數學 排列組合計算
- 並查集的應用2並查集
- (轉載)並查集的作用並查集
- 並查集(Union Find)並查集
- 並查集應用並查集
- The Door Problem 並查集並查集
- 並查集練習並查集
- 並查集—應用並查集
- 寫模板, 並查集。並查集