BZOJ1040 騎士(動態規劃)

2021-08-14 18:17:08 字數 1006 閱讀 1556

bzoj

對於每一組厭惡的關係

顯然是連邊操作

如果是一棵樹的話

很顯然的樹型dp

但是,現在相當於有很多個基環

也就是在一棵樹的基礎上再加了一條邊

這個時候怎麼辦,

暴力拆掉基環(拆掉任意一條邊)

跑兩遍dp

計算出強制不選兩個點中某乙個的最大值

此時就是這個基環的最大值

(不用拆掉所有的邊,因為只要拆掉一條邊之後可以用樹型dp

來控制)

可能存在多個聯通塊

所以要算多遍,然後求和

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define max 1200000

inline

int read()

struct linee[max<<1];

int h[max],cnt=2;

int n,a[max];

inline

void add(int u,int v);h[u]=cnt++;}

long

long f[max][2];

int u,v,l;

int fa[max],cri[max],tot;

int getf(int x)

void dfs(int u,int ff)

}int main()

long

long ans=0;

for(int i=1;i<=tot;++i)

printf("%lld\n",ans);

return

0;}

BZOJ1040 騎士(動態規劃)

bzoj 對於每一組厭惡的關係 顯然是連邊操作 如果是一棵樹的話 很顯然的樹型 dp 但是,現在相當於有很多個基環 也就是在一棵樹的基礎上再加了一條邊 這個時候怎麼辦,暴力拆掉基環 拆掉任意一條邊 跑兩遍 dp 計算出強制不選兩個點中某乙個的最大值 此時就是這個基環的最大值 不用拆掉所有的邊,因為只...

BZOJ 1040 騎士(樹形DP)

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

BZOJ1040 騎士 基環樹DP

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