BZOJ 3444 最後的晚餐

2021-08-07 03:33:50 字數 1092 閱讀 6729

n年沒寫題解於是一時興起就來寫一下

先考慮無解情況

如果有點度數》2那肯定無解 還有 環的情況也會無解

那麼度數為1或2的點 他們肯定是連成一條條的鏈

這些鏈的組合方案只有2種 就是只能翻轉一下

答案就是 (度數為0的點數+鏈數)! * (2^鏈數)

**可能不夠美觀?(貌似並不快)

#include

using

namespace

std;

typedef

long

long ll;

const

int n=500010,mod=989381;

inline

int read()

while(ch>='0' && ch<='9')

return x*f;

}vector

v[n];

ll jc[n];

bool b[n];

struct node;

queue

q;int main()

if(o)continue;

v[x].push_back(y);

v[y].push_back(x);

}int cnt=0,u=0; ll ans=1;

bool no=0;

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

if(v[i].size()>2)

if(no)

for(i=1;i<=n;++i) if(!b[i] && v[i].size()==2)); b[i]=1; ++u,++cnt;

while(!q.empty())

if(!b[y]));}

}if(no)break;

}if(no)break;

ans=ans*2%mod;

}if(no)

for(i=1;i<=n;++i) if(!b[i] && v[i].size()==1)

ans=ans*jc[cnt+(n-u)]%mod;

printf("%lld\n",ans);

return

0;}

bzoj3444 並查集 最後的晚餐

description 問題背景 高三的學長們就要離開學校,各奔東西了。某班n人在舉行最後的離別晚餐時,飯店老闆覺得十分糾結。因為有m名學生偷偷找他,要求和自己暗戀的同學坐在一起。問題描述 飯店給這些同學提供了乙個很長的桌子,除了兩頭的同學,每乙個同學都與兩個同學相鄰 即坐成一排 給出所有資訊,滿足...

bzoj 3444 最後的晚餐 並查集

題目 n個人排成一排,有m個條件,第i個條件要求ai和bi相鄰,求方案數。資料範圍 100 的資料,0 n 500000,1 ai,bi n,0 m n,保證沒有人自戀。演算法 並查集 組合數 難度 noip 題解 由於要求排成一排,因此如果關係出現了環則無解 而乙個位置最多挨著兩個,所以deg x...

最後的晚餐

今天公司同事請我吃飯,算是給我踐行。相處了四年多,大家關係都很好,每個人的脾氣性格都很熟悉了,實在是有點捨不得。還記得剛進公司的時候,還心裡暗暗發誓 要在這裡做一輩子,幹出一番事業來。可今天卻跟同事說 人不可能一輩子呆在一家公司的。這一前一後的反差,自己都覺得自己有點善變了。可仔細想來,這就是成長吧...