题目链接:BZOJ - 1040

题目分析

这道题目的模型就是一个图,不一定联通,每个连通块的点数等于边数。

每个连通块都是一个基环+外向树。即树上增加了一条边。

如果是树,就可以直接树形DP了。然而这是基环+外向树,需要先找到环上的一条边,记录这条边的两个端点 R1, R2,删掉这条边。

然后分两种情况:一定不选R1;一定不选R2;对这两种情况分别做一次树形DP就可以了。

答案加上这两种情况的答案的较大值。

代码

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdio> using namespace std; const int MaxN = 1000000 + 5; typedef long long LL; const LL INF = 99999999999999999; int n, R, R1, R2, Rt;
int A[MaxN]; LL Ans, Temp;
LL F[MaxN][2]; bool Visit[MaxN]; struct Edge
{
int u, v, t;
Edge *Next;
} E[MaxN * 2], *P = E, *Point[MaxN]; inline void AddEdge(int x, int y, int z)
{
++P; P -> u = x; P -> v = y; P -> t = z;
P -> Next = Point[x]; Point[x] = P;
} inline LL gmax(LL a, LL b) {return a > b ? a : b;} void DFS(int x, int y)
{
Visit[x] = true;
for (Edge *j = Point[x]; j; j = j -> Next)
{
if (j -> t == y) continue;
if (Visit[j -> v])
{
R1 = x;
R2 = j -> v;
Rt = j -> t;
}
else DFS(j -> v, j -> t);
}
} void Solve(int x, int y)
{
F[x][0] = 0; F[x][1] = A[x];
for (Edge *j = Point[x]; j; j = j -> Next)
{
if (j -> t == y || j -> t == Rt) continue;
Solve(j -> v, j -> t);
F[x][0] += gmax(F[j -> v][0], F[j -> v][1]);
F[x][1] += F[j -> v][0];
}
if (x == R) F[x][1] = -INF;
} int main()
{
scanf("%d", &n);
int a;
for (int i = 1; i <= n; ++i)
{
scanf("%d%d", &A[i], &a);
AddEdge(i, a, i);
AddEdge(a, i, i);
}
memset(Visit, 0, sizeof(Visit));
Ans = 0;
for (int i = 1; i <= n; ++i)
{
if (Visit[i]) continue;
DFS(i, 0);
R = R1;
Solve(i, 0);
Temp = gmax(F[i][0], F[i][1]);
R = R2;
Solve(i, 0);
Temp = gmax(Temp, gmax(F[i][0], F[i][1]));
Ans += Temp;
}
printf("%lld\n", Ans);
return 0;
}

  

[BZOJ 1040] [ZJOI2008] 骑士 【基环+外向树DP】的更多相关文章

  1. 1040: [ZJOI2008]骑士~基环外向树dp

    Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里,在和平环境中 ...

  2. BZOJ 1040: [ZJOI2008]骑士 基环加外向树

    1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1190  Solved: 465[Submit][Status] ...

  3. [bzoj] 1040 骑士 || 基环外向树dp

    原题 给出n个点n条边和每个点的点权,一条边的两个断点不能同时选择,问最大可以选多少. //图是一张基环外向树森林 是不是很像舞会啊- 就是多了一条边. 所以我们考虑一下对于一棵基环外向树,拆掉一条在 ...

  4. bzoj 1040: [ZJOI2008]骑士 環套樹DP

    1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1755  Solved: 690[Submit][Status] ...

  5. BZOJ 1040 [ZJOI2008]骑士 (基环树+树形DP)

    <题目链接> 题目大意: Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的 ...

  6. 【BZOJ】1040: [ZJOI2008]骑士(环套树dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1040 简直不能再神的题orz. 蒟蒻即使蒟蒻,完全不会. 一开始看到数据n<=1000000就 ...

  7. HYSBZ 1040 骑士 (基环外向树DP)

    Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里,在和平环境中 ...

  8. 初涉基环外向树dp&&bzoj1040: [ZJOI2008]骑士

    基环外向树dp竟然如此简单…… Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发 ...

  9. 【BZOJ1040】[ZJOI2008] 骑士(基环外向树DP)

    点此看题面 大致题意: 给你一片基环外向树森林,如果选定了一个点,就不能选择与其相邻的节点.求选中点的最大权值和. 树形\(DP\) 此题应该是 树形\(DP\) 的一个升级版:基环外向树\(DP\) ...

随机推荐

  1. oracle本月、上月、去年同月第一天最后一天

    select trunc(sysdate, 'month') 本月第一天,        trunc(last_day(sysdate)) 本月最后一天,        trunc(add_month ...

  2. Linux内核源代码情景分析系列

    http://blog.sina.com.cn/s/blog_6b94d5680101vfqv.html Linux内核源代码情景分析---第五章 文件系统  5.1 概述 构成一个操作系统最重要的就 ...

  3. TCP/IP 编程

    http://www.cnblogs.com/ggjucheng/archive/2012/08/18/2645324.html

  4. Spring定时任务,Spring4整合quartz2.2,quartz-scheduler定时任务

    Spring4整合quartz2.2,quartz-scheduler定时任务,Spring定时任务 >>>>>>>>>>>>& ...

  5. Spring声明式事务(xml配置事务方式)

    Spring声明式事务(xml配置事务方式) >>>>>>>>>>>>>>>>>>>& ...

  6. Entity Framework性能优化

    AsNonUnicode 执行如下语句,并用SqlProfiler监控其SQL: var list = WMFactory.ReChargeMobile.Queryable().Where(w =&g ...

  7. [弹出消息] C#ShowMessageBox帮助类

    点击下载 ShowMessage.rar 看下面代码吧 /// <summary> /// 类说明:Assistant /// 编 码 人:苏飞 /// 联系方式:361983679 // ...

  8. 初学HTML5系列二:HTML5新增的事件属性

    Window事件属性: 属性 值 描述 onafterprint  script 文档打印之后运行的脚本. 属性发生于用户设置页面打印并且打印对话框已出现之后. onbeforeprint  scri ...

  9. asp IIS部署An error occurred on the server when processing the URL错误提示解决

    An error occurred on the server when processing the URL. Please contact the system administrator.If ...

  10. 深入理解shared pool共享池之library cache的library cache pin系列三

    关于library cache相关的LATCH非常多,名称差不多,我相信一些人对这些概念还是有些晕,我之前也有些晕,希望此文可以对这些概念有个更为清晰的理解,本文主要学习library cache p ...