給出一幅有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,因為相鄰的...