ZJOI2016 小星星(容斥 dp)

2022-08-11 06:33:08 字數 785 閱讀 4318

題意相當於給一棵樹重新賦予彼此不同的編號,要求樹上相鄰的兩個節點在給定的另外乙個無向圖中也存在邊相連。

n很小,但列舉階乘肯定是會**的。

發現編號彼此不同對統計答案的影響太大了,我們可以嘗試先讓編號可以重複,但是限制可以選用的編號集,即o(2^n)列舉n個數的子集,然後容斥一下答案。

可選用的編號集合確定了,編號還可以重複,接下來直接跑樹形dp就可以了。f(u)(j)存的是u節點對映向j,子樹內的總方案數。

#includeusing namespace std;

const int n=40;

typedef long long ll;

#define rep(i,a,b) for(register int i=(a);i<=(b);++i)

#define il inline

int gr,h[n],nxt[n],to[n];

il void tu(int x,int y)

int n,m,mp[n][n],p[n],tot;

ll ans,dp[18][18],tmp;

void dfs(int u,int f)

dp[u][j]*=tmp;}}

}int main()

dfs(1,0);tmp=0;

rep(i,1,tot)tmp+=dp[1][i];

ans+=(((n-tot)&1)?-1ll:1ll)*tmp;

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

return 0;

}

容斥 ZJOI2016 小星星

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

bzoj4455 容斥原理 DP 小星星

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

小星星 子集反演 容斥

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