容斥 ZJOI2016 小星星

2022-05-06 20:15:12 字數 2497 閱讀 6373

小y是乙個心靈手巧的女孩子,她喜歡手工製作一些小飾品。她有n顆小星星,用m條彩色的細線串了起來,每條細線連著兩顆小星星。有一天她發現,她的飾品被破壞了,很多細線都被拆掉了。這個飾品只剩下了n?1條細線,但通過這些細線,這顆小星星還是被串在一起,也就是這些小星星通過這些細線形成了樹。小y找到了這個飾品的設計圖紙,她想知道現在飾品中的小星星對應著原來圖紙上的哪些小星星。如果現在飾品中兩顆小星星有細線相連,那麼要求對應的小星星原來的圖紙上也有細線相連。小y想知道有多少種可能的對應方式。只有你告訴了她正確的答案,她才會把小飾品做為禮物送給你呢。

輸入格式

第一行包含個2正整數n,m,表示原來的飾品中小星星的個數和細線的條數。 接下來m行,每行包含2個正整數u,v,表示原來的飾品中小星星u和v通過細線連了起來。 這裡的小星星從1開始標號。保證u≠v,且每對小星星之間最多只有一條細線相連。 接下來n-1行,每行包含個2正整數u,v,表示現在的飾品中小星星u和v通過細線連了起來。 保證這些小星星通過細線可以串在一起。 n<=17,m<=n*(n-1)/2

輸出格式

輸出共1行,包含乙個整數表示可能的對應方式的數量。 如果不存在可行的對應方式則輸出0。

樣例樣例輸入

4 3

1 21 3

1 44 1

4 24 3

樣例輸出

6
這個題真的是gg

題目中一點暗示都沒有,我還是憑常年wa題的經驗才把 long long開起來的qaq

真是*****。

考場上我wa了3次,第一次50,錯因應該就是爆int。

第二次我以為我的 tree dp 給wa掉了,改了個限制條件。

第三次我終於意識到 long long 的事情了,但是我沒改限制條件。

第四次我終於ac了。

qaq首先,這個題,特別容易看錯【如果不看樣例的話絕對會理解出錯,比如我。

我一看這個題,覺得是乙個求生成樹的問題。

emmm或者說是通過生成樹倒退原圖的過程。

就在我苦思冥想怎麼做的時候,我瞄了一眼樣例。

qaq 已經給出原圖,給出生成樹了。

??????什麼鬼啊?????????

回去看題面,發現裡面有一句這樣的話:

她想知道現在飾品中的小星星對應著原來圖紙上的哪些小星星。

也就是說,剪掉一些線之後,星星的編號變了。

??????什麼意思啊????????

這個時候,我們發現其實每個節點究竟是什麼已經不重要了。

重要的是, 哪兩個點之間有著連線的關係。

所以這題就變成了,給定一些連線關係,求滿足下列關係的組合有多少個?

那麼,很顯然,我們可以直接計算每個點對映之後會形成的方案數。【對於每個位置可選的方案數稱起來就可以了

考慮 dp[ i ][ j ] 在限制s下的含義為: 樹中的點只能對映原圖上屬於集合 s 的點 ,i 點對映到 j 點 在以 i 為根的子樹中的方案。

這個時候,手玩兩組資料,就會發現,多算了。

在對映的時候,有可能把好多個節點都標號成了同乙個。

那麼就需要把這些方案數減去。

然後我就想到了容斥。【可能我本來容斥就學的不錯,一下就想到了

假設,在限制s下的對映方案數為ans[s] ,

只許對映到s且s集合中每個點都被至少對映一次的方案數為 calc [s] 。

那麼顯然的是 : ans[s] = σ calc [t]  (其中t是s的乙個子集)。

所以我們容斥從小到大計算出calc,最後calc[2^n-1]就是答案。

#include#include

#include

#include

#include

#include

#define ll long long

#define rint register int

using

namespace

std;

ll n,m,num;

ll a[

20][20],c[30],cnt[20

];ll f[

20][20],ans[140005];//

ans表示選點集合只能是s子集的方案數

vectorv[20

];void

dp(ll x,ll fa) }}

return;}

intmain()

for(rint i=1;i)

c[0]=1

;

for(rint i=1;i<=20;i++)

c[i]=c[i-1]<<1

;

for(rint i=1;i)

for(rint i=1;i)

for(rint j=(i-1)&i;j;j=(j-1)&i)

ans[i]-=ans[j];

cout

<1]

}

生氣了,所以全部longlong!!!!!!

ZJOI2016 小星星(容斥 dp)

題意相當於給一棵樹重新賦予彼此不同的編號,要求樹上相鄰的兩個節點在給定的另外乙個無向圖中也存在邊相連。n很小,但列舉階乘肯定是會 的。發現編號彼此不同對統計答案的影響太大了,我們可以嘗試先讓編號可以重複,但是限制可以選用的編號集,即o 2 n 列舉n個數的子集,然後容斥一下答案。可選用的編號集合確定...

小星星 子集反演 容斥

小 y 是乙個心靈手巧的女孩子,她喜歡手工製作一些小飾品。她有 n 顆小星星,用 m 條彩色的細線串了起來,每條細線連著兩顆小星星。有一天她發現,她的飾品被破壞了,很多細線都被拆掉了。這個飾品只剩下了 n 1 條細線,但通過這些細線,這顆小星星還是被串在一起,也就是這些小星星通過這些細線形成了樹。小...

bzoj4455 容斥原理 DP 小星星

description 小y是乙個心靈手巧的女孩子,她喜歡手工製作一些小飾品。她有n顆小星星,用m條彩色的細線串了起來,每條細 線連著兩顆小星星。有一天她發現,她的飾品被破壞了,很多細線都被拆掉了。這個飾品只剩下了n?1條細線,但 通過這些細線,這顆小星星還是被串在一起,也就是這些小星星通過這些細線...