bzoj 1040 騎士 基環外向樹dp

2022-05-29 12:21:13 字數 858 閱讀 5926

給出n個點n條邊和每個點的點權,一條邊的兩個斷點不能同時選擇,問最大可以選多少。

//圖是一張基環外向樹森林

是不是很像舞會啊~

就是多了一條邊。

所以我們考慮一下對於一棵基環外向樹,拆掉一條在環上的邊,變成一棵樹。在這個樹上以斷邊的乙個斷點為根,跑舞會,就得到了這棵樹的最大值(根選和根不選了兩種)。考慮到對於拆下來的內一條邊,也要滿足斷點不能同時選擇,所以此時得到的答案中,根不選一定是正確的,但是根選不一定是正確的(因為我們不知道此刻另乙個斷點是否被選擇)。

那麼我們強制該點不選,然後更新至根選的狀態即可。

#include#include#define n 1000010

typedef long long ll;

using namespace std;

int n,a[n],f[n],head[n],ecnt=1,cnt[n];

ll dp[n][2],ans;

bool vis[n];

struct hhh

edge[n];

int read()

void add(int u,int v)

void dfs(int x)//經典dp

}void dp(int x)

}dp[root][1]=a[root];

for (int i=head[root];i;i=edge[i].next)

dp[root][1]+=dp[edge[i].to][0];//強制根選,則+=兒子們都不選

ans+=max(dp[root][0],dp[root][1]);//取當前基環外向樹的最大值

}int main()

BZOJ1040 騎士 基環樹DP

description z國的騎士團是乙個很有勢力的組織,幫會中匯聚了來自各地的精英。他們劫富濟貧,懲惡揚善,受到社會各 界的讚揚。最近發生了一件可怕的事情,的y國發動了一場針對z國的侵略戰爭。戰火綿延五百里,在和平環境 中安逸了數百年的z國又怎能抵擋的住y國的軍隊。於是人們把所有的希望都寄託在了騎...

BZOJ1040 騎士 環套樹 樹形dp

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

BZOJ1040環加外向樹森林上的動態規劃

所有的邊是無向的!想一想也知道,只要有乙個人討厭另外乙個人,這兩個人最後是不會在一起的。n個人n條邊 圖不保證聯通 這就是乙個環加外向樹森林 不能同時取一條邊上的兩個人,用dp來實現 dfs找環,拆環x,y,分別討論x不取和y不取 include include include include de...