洛谷 P2607 ZJOI2008 騎士

2021-08-13 23:10:09 字數 1344 閱讀 8279

給出一幅有n個點,n條邊的無向未必聯通圖,每乙個點有乙個權並與另外乙個點相連,對其中一些點進行染色,且相鄰兩點的顏色不能都染,則最大的染色點權值和是多少.

這題和 洛谷p1453城市環路 很像,區別就在於它不是連通圖.

因而可以先用並查集和vector進行分塊,易證每一塊都是比樹多一條邊的連通圖,每一塊再按照洛谷 p1453 城市環路的做法做即可.

//#pragma gcc optimize(3)

#include

#include

#include

#include

#define n 1001000

#define db double

#define ll long long

using

namespace std;

struct bn

;bn bn[n*2]

;ll n,ans,an,zl[n]

,bb,first[n]

,s,t,dp[n][2

],fa[n]

,j1,j2;

bool vis[n]

,get;

vector<

int>jh[n]

;inline

void

add(ll u,ll v)

void

find

(ll now,ll last)

vis[bn[p]

.to]=1

;find

(bn[p]

.to,now);}

}ll dfs

(ll now,

bool rs,ll last)

}else

} dp[now]

[rs]

=res;

return res;

}intgf(

int u)

intmain()

for(i=

1; i<=n; i++

)for

(i=1

; i<=n; i++)}

p=first[t]

;for

(; p!=-1

; p=bn[p]

.next)

} an=

dfs(s,0,

-1);

for(j=

0; j.size()

; j++

) ans+

=max

(an,

dfs(t,0,

-1))

; get=s=t=j1=j2=0;

} cout

}

洛谷P2607 ZJOI2008 騎士 題解

題目傳送門 題目大意 每個騎士都有自己的戰鬥力且不能和另乙個特定的騎士同時出征,試問出征的騎士最大總戰鬥力是多少 總戰鬥力等於所有出征的騎士的戰鬥力之和 思考過程 做過洛谷p1352 沒有上司的舞會的同學肯定會覺得這個題和它很想,只不過那個題是n個點n 1條邊的樹,這個題是n個點n條邊的基環樹,多了...

P2607 ZJOI2008 騎士(基環樹)

邊數等於點數,是基環樹。考慮dp,如果是樹的話,轉移方程為dp u 1 選擇u w u dp v 0 v為u的子節點 dp u 0 不選擇u max dp v 0 dp v 1 然後基環樹只要找到環後,斷開環上的一條邊就成了樹。斷開的邊上兩端點不能同時選擇,所以對於每棵基環樹,我們求兩邊dp,分別限...

洛谷P2607題解

想要深入學習樹形dp,我的部落格。本題的dp模型同 p1352 沒有上司的舞會。本題的難點在於如何把基環樹dp轉化為普通的樹上dp。考慮斷邊和換根。先找到其中的乙個環,在上面隨意取兩個點,斷開這兩個點的邊,使其變為一棵普通樹。以其中的一點為樹根做樹形dp,再以另一點為樹根再做一次樹形dp,因為相鄰的...