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了.然而 ...
随机推荐
- 利尔达NB-IOT模块烧写固件的步骤
1. NB-IOT是3个内核,用户开发的是A核,就是应用核,用Eclipse软件打开软件SDK之后,会生成一个bin文件(应用核的bin),现在就是要把bin文件合并到包里面(3个内核的bin),一起 ...
- C#函数库
//读取文本文件并返回内容不同的那一行 public static String different(String sOldFile, String sNewFile) ...
- 网易七鱼 Android 高性能日志写入方案
本文来自网易云社区 作者:网易七鱼 Android 开发团队 前言 网易七鱼作为一款企业级智能客服系统,对于系统稳定性要求很高,不过难保用户在使用中不会出现问题,而 Android SDK 安装在用户 ...
- JavaWeb项目生成PDF文件添加水印图片并导出
一.前言 首先需要在Maven中添加相应的jar包依赖,若项目没用到Maven,也可自行下载相应所需的jar包(itextpdf.jar 与 itext-asian.jar),如下图所示.点此下载 M ...
- 第四篇 与Flask相关的插件(flask-session、wtforms)
公司中使用SQL的种方式: 1. 写Django:ORM(关系对象映射), 2. 写Flask和其他:有两种方式: (1) 原生SQL:使用原生SQL有两种选择: A. pymysql (python ...
- Struts2(九.初始化用户列表时显示用户照片数目)
1.userlist.jsp //显示每个用户照片的数目(遍历每个用户) $(".picture").each(function(i,e){ $.post("${page ...
- gdb超级基础教程
GDB超级基础教程 为什么叫超级基础呢,因为我被坑了一把.... 编译选项带 -g 就可以在可执行程序中加入调试信息,然后就可以使用gdb去查看了. 使用help命令就可以看到: (gdb) help ...
- react和vue的区别
1.数据改变的方式 react是通过setState来改变数据,然后重走组件的渲染过程.而vue是通过Object.defineProperty和watcher来显示响应式的数据,所以数据的改变是直接 ...
- geth账户密码
xiaocong geth账户密码 123 {d6abe909013d8da914ae2a08c9b58e7b76601b39} 账户密码 123456 0x4A7F15104F54dB3214D2F ...
- Struts2文件上传带进度条,虽然不是很完美
好久没有写东西,最近在做个项目,要用到文件h 传的,以前虽然也做上传,但是总觉得不好用 ,现在和队友合作做了一个带进度条的上传,觉得还行~~和大家分享一下. 首先说一下大概是这样实现的,在我们平时的上 ...