1040: [ZJOI2008]骑士
首先是因为想学仙人掌图才来先拿这题热热身,结果&……竟然调了一个晚上我的傻叉!(其中一大半的时候是在郁闷hzwer和Greens的代码画风不一样,后来才发现一个用拓扑一个用树dp23333,以后代码坚决自己解决)
贴一下hzwer大神的题解吧:http://hzwer.com/1729.html
以及云的代码:http://hi.baidu.com/greencloud/archive/tag/dp?page=4
treedp:
首先我们发现一个骑士只会觉得另一个骑士丑(233),然后我们想到了树,因为树上每个点只有一个入度,所以边建为从被讨厌的人指向讨厌他的。但是会出现环的情况……这时候一定是在树根那里有个环!(画图就可以发现一定是这样,如果不是在树根那么就会有出现入度为2的情况,显然不可能……)。然后就先处理出不再环上的每个点与各自的子树的情况(dp[x,0]表示x取,dp[x,1],表示x不取),由于树上只有一个环,so那些环上的点的儿子们如果不再环上那子树一定是棵树不会出现环,so是可以用treedp递归处理出来。(然后拓扑的方法就相反啦,边是从某个人指向这个人讨厌的人,那么那些入度为0的点就是老好人,然后从这些老好人开始推,找老好人讨厌的人&……算过去)
然后就是处理环上怎么取最大的问题啦。
破环成链,这时候就先不考虑链头与链尾不能同时取的情况,跑一边dp,然后再来考虑链头和链尾的限制,也就是链头取的时候链尾不能取,链头不取的时候链尾可取可不取……
(我X我最近什么鬼状态!!!连傻叉题都不会写了)
type
arr=record
toward,next:longint;
end; const
maxn=; var
edge:array[..maxn]of arr;
first,fa,link,from:array[..maxn]of longint;
value:array[..maxn]of int64;
chose:array[..maxn]of boolean;
dp:array[..maxn,..]of int64;
f:array[..maxn,..]of int64;
n,m,tot:longint; function max(x,y:int64):int64;
begin
if x<y then exit(y);
exit(x);
end; procedure addedge(j,k:longint);
begin
inc(tot);
edge[tot].toward:=k;
edge[tot].next:=first[j];
first[j]:=tot;
end; procedure treedp(x:longint);
var
i,too:longint;
begin
dp[x,]:=value[x];
dp[x,]:=;
chose[x]:=false;
i:=first[x];
while i> do begin
too:=edge[i].toward;
treedp(too);
dp[x,]:=dp[x,]+max(dp[too,],dp[too,]);
dp[x,]:=dp[x,]+dp[too,];
i:=edge[i].next;
end;
end; procedure into;
var
i,j:longint;
begin
readln(n);
for i:= to n do begin
chose[i]:=true;
read(value[i],j);
addedge(j,i);
fa[i]:=j;
end;
end; procedure work;
var
i,j,x,now,sum,too:longint;
ans,answer:int64;
begin
answer:=;
for i:= to n do
if chose[i] then begin
sum:=;
x:=i;
while chose[x] do begin
chose[x]:=false;
x:=fa[x];
//from[fa[x]]:=x;
from[fa[x]]:=x;
end;
now:=x;
repeat
j:=first[x];
dp[x,]:=value[x];
while j> do begin
too:=edge[j].toward;
if too<>from[x] then begin
treedp(too);
dp[x,]:=dp[x,]+max(dp[too,],dp[too,]);
dp[x,]:=dp[x,]+dp[too,];
end;
j:=edge[j].next;
end;
inc(sum);
link[sum]:=x;
x:=fa[x];
until x=now;
ans:=;
f[,]:=dp[link[],];
f[,]:=dp[link[],];
f[,]:=dp[link[],];
f[,]:=dp[link[],];
for j:= to sum do begin
x:=link[j];
f[j,]:=max(f[j-,],f[j-,])+dp[x,];
f[j,]:=f[j-,]+dp[x,];
f[j,]:=max(f[j-,],f[j-,])+dp[x,];
f[j,]:=f[j-,]+dp[x,];
end;
ans:=max(f[sum,],f[sum,]);
ans:=max(ans,f[sum,]);
answer:=answer+ans;
end;
writeln(answer);
end; begin
into;
work;
end.
1040: [ZJOI2008]骑士的更多相关文章
- BZOJ 1040: [ZJOI2008]骑士 基环加外向树
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1190 Solved: 465[Submit][Status] ...
- bzoj 1040: [ZJOI2008]骑士 環套樹DP
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1755 Solved: 690[Submit][Status] ...
- bzoj 1040: [ZJOI2008]骑士 树形dp
题目链接 1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3054 Solved: 1162[Submit][S ...
- [BZOJ 1040][ZJOI2008]骑士
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5403 Solved: 2060[Submit][Status ...
- bzoj 1040 1040: [ZJOI2008]骑士
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5210 Solved: 1987[Submit][Status ...
- Bzoj 1040 [ZJOI2008]骑士 题解
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5368 Solved: 2044[Submit][Status ...
- 【BZOJ】1040: [ZJOI2008]骑士(环套树dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1040 简直不能再神的题orz. 蒟蒻即使蒟蒻,完全不会. 一开始看到数据n<=1000000就 ...
- 1040: [ZJOI2008]骑士 - BZOJ
Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火 ...
- bzoj 1040 [ZJOI2008]骑士(基环外向树,树形DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1040 [题意] 给一个基环森林,每个点有一个权值,求一个点集使得点集中的点无边相连且权 ...
- [BZOJ 1040] [ZJOI2008] 骑士 【基环+外向树DP】
题目链接:BZOJ - 1040 题目分析 这道题目的模型就是一个图,不一定联通,每个连通块的点数等于边数. 每个连通块都是一个基环+外向树.即树上增加了一条边. 如果是树,就可以直接树形DP了.然而 ...
随机推荐
- SLAM前沿问题梳理
鲁棒性问题:数据关联是影响系统鲁棒性的主要原因 特征提取.线特征 短期内的数据关联是最容易处理的,新的研究方向包括特征提取.线特征等. 回环检测 对于前端的环闭合检测,检测当前测量中的特征并试图将它们 ...
- Error starting mongod. /var/run/mongodb/mongod.pid exists.启动mongodb报错
linux上安装mongodb,启动时报上面的错,解决如下: 解决方法: 1.删除mongod.pid文件 rm -rf /var/run/mongodb/mongod.pid 2.修改/tmp/mo ...
- spring源码-增强容器xml解析-3.1
一.ApplicationContext的xml解析工作是通过ClassPathXmlApplicationContext来实现的,其实看过ClassPathXmlApplicationContext ...
- json模块使用总结——Python
# 原创文章,未经允许请勿转载 通过Python的json模块,可以将字符串形式的json数据转化为字典,也可以将Python中的字典数据转化为字符串形式的json数据. 之前使用这个模块时,都是随用 ...
- VIN码识别:毫秒间99%精准识别
科技改变生活.几年前,人工智能还仅是一个噱头,现在已逐渐融入我们的工作和生活,代替了一些重复性的.繁杂的人工劳动,在提高工作效率的同时,提升了客户体验. 车架号也叫VIN码,由17位数字和字母混合组成 ...
- caffe Mac 安装
参考了 https://zhuanlan.zhihu.com/p/24853767 安装caffe的依赖项 brew install --fresh -vd snappy leveldb gflags ...
- leetcode-生成括号(回溯算法)
转载出处:https://blog.csdn.net/yanerhao/article/details/68561290 生成括号 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生 ...
- Prime Matrix(暴力出奇迹)
Description You've got an n × m matrix. The matrix consists of integers. In one move, you can apply ...
- win7 个人电脑 IIS7服务器(web服务器) 同一局域网下均可访问本机网页
建立web服务器: 1.控制面板-->程序-->打开或关闭windows功能-->internet信息服务全部打钩,确定即可. 访问网页: 1.C:\inetpub\wwwroot\ ...
- 评价cnblogs的用户体验
用户体验: 1.是否提供良好的体验给用户(同时提供价值)? cnbolgs为广大的用户提供了一个学习工作交流的平台,方便大家对各种问题提出自己的看法,并且可以实现不同用户的即时评论,互动交流. ...