1. 程式人生 > >bzoj 5314: [Jsoi2018]潛入行動

bzoj 5314: [Jsoi2018]潛入行動

cpp 編號 con esc \n har == main name

Description

外星人又雙叒叕要攻打地球了,外星母艦已經向地球航行!這一次,JYY已經聯系好了黃金艦隊,打算聯合所有JSO
Ier抵禦外星人的進攻。在黃金艦隊就位之前,JYY打算事先了解外星人的進攻計劃。現在,攜帶了監聽設備的特工
已經秘密潛入了外星人的母艦,準備對外星人的通信實施監聽。外星人的母艦可以看成是一棵n個節點、n-1條邊的
無向樹,樹上的節點用1,2...n編號。JYY的特工已經裝備了隱形模塊,可以在外星人母艦中不受限制地活動,可以
神不知鬼不覺地在節點上安裝監聽設備。如果在節點u安裝監聽設備,則JYY能夠監聽與u直接相鄰所有的節點的通
信。換言之,如果在節點u安裝監聽設備,則對於樹中每一條邊(u,v),節點v都會被監聽。特別註意放置在節點u的

監聽設備並不監聽u本身的通信,這是JYY特別為了防止外星人察覺部署的戰術。
JYY的特工一共攜帶了k個監聽設備,現在JYY想知道,有多少種不同的放置監聽設備的方法,能夠使得母艦上所有
節點的通信都被監聽?為了避免浪費,每個節點至多只能安裝一個監聽設備,且監聽設備必須被用完。

Solution

\(f[x][i][0/1][0/1]\) 表示 \(x\) 子樹內的點中選了 \(i\) 個點,\(x\) 是否選, \(x\) 是否被兒子覆蓋
簡單轉移即可

#include<bits/stdc++.h>
using namespace std;
template<class T>void
gi(T &x){ int f;char c; for(f=1,c=getchar();c<'0'||c>'9';c=getchar())if(c=='-')f=-1; for(x=0;c<='9'&&c>='0';c=getchar())x=x*10+(c&15);x*=f; } const int N=1e5+10,mod=1e9+7; int n,K,head[N],nxt[N*2],to[N*2],num=0,sz[N],f[N][105][2
][2],g[105][2][2]; inline void link(int x,int y){nxt[++num]=head[x];to[num]=y;head[x]=num;} inline void dfs(int x){ sz[x]=f[x][1][1][0]=f[x][0][0][0]=1; for(int P=head[x],u;P;P=nxt[P]){ if(sz[u=to[P]])continue; dfs(u); for(int i=min(sz[x],K);i>=0;i--) for(int j=0;j<2;j++)for(int k=0;k<2;k++)g[i][j][k]=f[x][i][j][k],f[x][i][j][k]=0; for(int i=min(sz[x],K);i>=0;i--) for(int j=min(sz[u],K-i);j>=0;j--){ int sum=(1ll*f[u][j][0][0]+f[u][j][0][1]+f[u][j][1][0]+f[u][j][1][1])%mod; f[x][i+j][1][0]=(f[x][i+j][1][0]+1ll*g[i][1][0]*(f[u][j][0][0]+f[u][j][0][1]))%mod; f[x][i+j][1][1]=(f[x][i+j][1][1]+1ll*g[i][1][1]*sum+1ll*g[i][1][0]*(f[u][j][1][0]+f[u][j][1][1]))%mod; f[x][i+j][0][1]=(f[x][i+j][0][1]+1ll*g[i][0][0]*f[u][j][1][1]+1ll*g[i][0][1]*(f[u][j][1][1]+f[u][j][0][1]))%mod; f[x][i+j][0][0]=(f[x][i+j][0][0]+1ll*g[i][0][0]*f[u][j][0][1])%mod; } sz[x]+=sz[u]; } } int main(){ freopen("pp.in","r",stdin); freopen("pp.out","w",stdout); int x,y; cin>>n>>K; for(int i=1;i<n;i++){ gi(x);gi(y); link(x,y);link(y,x); } dfs(1); printf("%d\n",(f[1][K][0][1]+f[1][K][1][1])%mod); return 0; }

bzoj 5314: [Jsoi2018]潛入行動