jzoj4887 最大匹配 樹形動態規劃

2021-07-24 12:59:21 字數 870 閱讀 4688

求出一棵樹的最大匹配和方案。樹形dp,f[i][0,1]表示i有沒選的最大匹配,順便記錄方案數。考慮選i的情況,要在兒子中找到乙個沒選的,統計一下方案數。

#include#include#include#define ll long long

#define min(a,b) ((ab)?a:b)

#define fo(i,j,k) for(int i=j;i<=k;i++)

#define fd(i,j,k) for(int i=j;i>=k;i--)

using namespace std;

int const maxn=1e5;

int t,p,n,gra,begin[maxn*2+10],to[maxn*2+10],next[maxn*2+10];

ll f[maxn+10][10],g[maxn+10][10],mod=1e9+7,inf=1e9;

void insert(int u,int v)

ll pow(ll x,ll y)

return z;

}void dfs(int now,int pre)else

if(f[to[i]][0]to[i]][0])else

}if(okg||okfg)f[now][0]=g[now][0]+1;

if(okg)f[now][1]=g[now][1]*okg%mod;

if(okfg)

if((!okg)&&(!okfg))

}int main()

dfs(1,0);

if(p==1)printf("%lld\n",max(f[1][0],g[1][0]));

else

}return

0;}

POJ 2446 Chessboard 最大匹配

昨天沒有搞出來,今天彙編課想出來了,發現還是水水的,昨天估計是受到前面兩題的影響,一直把思考方向搞錯了 題目要求用1 2的卡片覆蓋整個區域,而且要恰好完全覆蓋,不能有重疊。仔細發現,每個格仔要麼是被橫著的1 2的卡片覆蓋,要麼是豎著的覆蓋,而且每個只能和周圍上下左右的四個格仔同時覆蓋,那麼這裡就可以...

poj2446 Chessboard 最大匹配

題目大意 乙個n m的棋盤,某些格仔不能用,問用1 2的骨牌能否完全覆蓋這個棋盤,當然,骨牌不能有重疊 思路 顯然黑白染色後,乙個骨牌只能覆蓋乙個白色格仔和乙個黑色格仔,然後我們間二染色建圖,看能否有完美匹配即可tut include include include define maxn 1000...

jzoj1669 最大收益

description 給出n件單位時間任務,對於第i件任務,如果要完成該任務,需要占用 si,ti 間的某個時刻,且完成後會有vi的收益。求最大收益。澄清 乙個時刻只能做一件任務,做乙個任務也只需要乙個時刻。input 第一行乙個整數n,表示可供選擇的任務個數.接下來的第二到第n 1行,每行三個數...