題意相當於給一棵樹重新賦予彼此不同的編號,要求樹上相鄰的兩個節點在給定的另外乙個無向圖中也存在邊相連。
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 條細線,但通過這些細線,這顆小星星還是被串在一起,也就是這些小星星通過這些細線形成了樹。小...