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國的軍隊。於是人們把所有的希望都寄託在了騎...