邊數等於點數,是基環樹。考慮dp,如果是樹的話,轉移方程為dp[u][1](選擇u)=w[u]+σdp[v][0],v為u的子節點; dp[u][0](不選擇u)=σmax(dp[v][0],dp[v][1])。然後基環樹只要找到環後,斷開環上的一條邊就成了樹。斷開的邊上兩端點不能同時選擇,所以對於每棵基環樹,我們求兩邊dp,分別限制兩個端點必須不選,然後取最大的結果。每棵樹答案相加即為最終答案。
#include#include#include#define ll long long
using namespace std;
const int n=1e6+10;
struct edgedata[n<<1];
int n,w1[n],num,num1,h[n],dfn[n],utmp,vtmp,idtmp;
ll ans,ans1,ans2,dp[n][3];
inline int read()
inline void addedge(int u,int v)
void dfs1(int u,int fa)
void getdp(int u,int fa)
}int main()
printf("%lld",ans);
return 0;
}
洛谷 P2607 ZJOI2008 騎士
給出一幅有n個點,n條邊的無向未必聯通圖,每乙個點有乙個權並與另外乙個點相連,對其中一些點進行染色,且相鄰兩點的顏色不能都染,則最大的染色點權值和是多少.這題和 洛谷p1453城市環路 很像,區別就在於它不是連通圖.因而可以先用並查集和vector進行分塊,易證每一塊都是比樹多一條邊的連通圖,每一塊...
洛谷P2607 ZJOI2008 騎士 題解
題目傳送門 題目大意 每個騎士都有自己的戰鬥力且不能和另乙個特定的騎士同時出征,試問出征的騎士最大總戰鬥力是多少 總戰鬥力等於所有出征的騎士的戰鬥力之和 思考過程 做過洛谷p1352 沒有上司的舞會的同學肯定會覺得這個題和它很想,只不過那個題是n個點n 1條邊的樹,這個題是n個點n條邊的基環樹,多了...
樹形dp P2607 ZJOI2008 騎士
將每個人討厭的人連上一條有向邊,構成了基環樹森林,從每個樹的環上斷一條邊,從兩條邊的點跑兩次dfs,計算一下最大值加到答案裡 還有就是會超int includeusing namespace std const int maxn 2e6 5 const long long inf 1e17 int ...