騎士(樹形dp)

2022-05-13 09:25:59 字數 836 閱讀 6046

題意:給你乙個基環樹森林,每個點有乙個權值,一條邊上的兩個節點不能同時選擇。選取任意個節點,求最大權值和

對於每顆基環樹:找環→斷邊→樹形dp(沒有上司的舞會)

#include#include

#include

#include

#include

#include

#define maxn 1000005

#define ll long long

using

namespace

std;

inline

intread()

while(ch>='

0' && ch<='

9')

return x*f;

}int n,cnt=-1

;int

val[maxn];

int v[maxn<<1],head[maxn],nxt[maxn<<1

];int

k1,k2,e;

bool

book[maxn];

ll f[maxn][

2],nans,ans;

void add(int x,int

y)void find_circle(int x,int

fa) find_circle(t,x);

}}void dfs(int x,int

fa)}

intmain()

for(i=1;i<=n;i++)

}printf(

"%lld

",ans);

return0;

}

BZOJ 1040 騎士(樹形DP)

題意 給出乙個圖,只有乙個環。每個點有乙個權值。選出一些點兩兩不相鄰,使得權值最大?思路 1 找到環。dfs,標記訪問,下乙個節點不是父節點但是已被訪問則這條邊就是環上的兩個點。標記這個邊是我們找到的環邊,並將這兩個點的中乙個設定為root,另乙個我們設為node 2 由於root和node不能同時...

洛谷P2607 騎士 樹形dp

思路 首先我們想到可以對相互憎惡的倆個騎士連邊,這樣就得到了乙個圖,有多個連通塊,並且每個連通塊中最多只有乙個環。如果每個連通塊都是一顆樹,那麼這個問題就很簡單 每個節點都是選或者不選。idea1 我想可不可以把這個比樹多一條邊的圖,變成一棵樹來處理,那麼就是要刪掉環上的一條邊。考慮刪掉這條邊 u,...

BZOJ1040 騎士 環套樹 樹形dp

time limit 10 sec memory limit 162 mb submit 5611 solved 2166 submit status discuss z國的騎士團是乙個很有勢力的組織,幫會中匯聚了來自各地的精英。他們劫富濟貧,懲惡揚善,受到社會各 界的讚揚。最近發生了一件可怕的事情...