其实已经准备退役了,但GDOI之前还是会继续学下去的!!当成兴趣在学,已经对竞赛失去信心了的样子,我还是回去跪跪文化课吧QAQ

第一道环套树DP...其实思想挺简单的,就把环拆开,分类处理。若拆成开的两个点是u,v,dp[i,0..1]分别表示第i位骑士不选和选

(1) 不选u,v点随意    (2)u随意,v点不选...

分类dp处理即可

 const maxn=;
type
edgetype=record
toward,next:longint;
end; var
edge:array[..maxn*] of edgetype;
first:array[..maxn] of longint;
val:array[..maxn] of int64;
dp:array[..maxn,..] of int64;
pd,vb,vc:array[..maxn] of boolean;
root,vv,e,tot:longint;
n:longint;
function max(x,y:int64):int64; begin if x>y then exit(x) else exit(y); end; procedure addedge(i,j:longint);
begin
edge[tot].toward:=j;
edge[tot].next:=first[i];
first[i]:=tot;
inc(tot);
end; procedure add(i,j:longint);
begin
addedge(i,j); addedge(j,i);
end; procedure dfs(v,fa:longint);
var i,tmp:longint;
begin
pd[v]:=true;
i:=first[v];
while i<>- do
begin
tmp:=edge[i].toward;
if not pd[tmp] then dfs(tmp,v)
else if tmp<>fa then
begin
vv:=v;
root:=tmp;
e:=i;
end;
i:=edge[i].next;
end;
end; procedure dpb(v:longint); //ban u
var i,tmp:longint;
begin
dp[v,]:=; dp[v,]:=val[v]; vb[v]:=true;
i:=first[v];
while i<>- do
begin
tmp:=edge[i].toward;
if (i<>e) and (i xor <>e) and not vb[tmp] then
begin
dpb(tmp);
dp[v,]:=dp[v,]+max(dp[tmp,],dp[tmp,]);
dp[v,]:=dp[v,]+dp[tmp,];
end;
i:=edge[i].next;
end;
end; procedure dpc(v:longint); //ban v;
var i,tmp:longint;
begin
dp[v,]:=; dp[v,]:=val[v]; vc[v]:=true;
i:=first[v];
while i<>- do
begin
tmp:=edge[i].toward;
if (i<>e) and (i xor <>e) and not vc[tmp] then
begin
dpc(tmp);
dp[v,]:=dp[v,]+dp[tmp,];
if tmp=vv then dp[v,]:=dp[v,]+dp[tmp,]
else dp[v,]:=dp[v,]+max(dp[tmp,],dp[tmp,]);
end;
i:=edge[i].next;
end;
end; procedure solve;
var i:longint;
rec,ans:int64;
begin
ans:=;
for i:= to n do
if not pd[i] then
begin
rec:=; root:=-; dfs(i,-);
dpb(root); rec:=dp[root,];
dpc(root); rec:=max(rec,max(dp[root,],dp[root,]));
inc(ans,rec);
end;
writeln(ans);
end; procedure init;
var i,x:longint;
begin
fillchar(first,sizeof(first),);
readln(n);
tot:=;
for i:= to n do
begin
readln(val[i],x);
add(i,x);
end;
end; Begin
init;
solve;
End.

【距离GDKOI:44天&GDOI:107天】【BZOJ1040】[ZJOI2008] 骑士 (环套树DP)的更多相关文章

  1. [BZOJ1040][ZJOI2008]骑士(环套树dp)

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

  2. [BZOJ1040][ZJOI2008]骑士 基环树DP

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1040 题目给出了$n$个点和$n$条无向边,即一棵基环树或者基环树森林. 如果题目给的关系 ...

  3. luogu2607/bzoj1040 [ZJOI2008]骑士 (基环树形dp)

    N个点,每个点发出一条边,那么这个图的形状一定是一个基环树森林(如果有重边就会出现森林) 那我做f[0][x]和f[1][x]分别表示对于x子树,x这个点选还是不选所带来的最大价值 然后就变成了这好几 ...

  4. 2018.11.06 bzoj1040: [ZJOI2008]骑士(树形dp)

    传送门 由题可知给出的是基环森林. 因此对于每个基环森林找到环断开dpdpdp两次就行了. 代码: #include<bits/stdc++.h> using namespace std; ...

  5. bzoj1040(ZJOI2008)骑士——基环树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1040 基环树的模板. 套路就是把环断开,先把一端作为根节点,强制不选:再把另一端作为根节点, ...

  6. [bzoj1040][ZJOI2008]骑士_树形dp_基环树_并查集

    骑士 bzoj-1040 ZJOI-2008 题目大意:n个骑士,每个骑士有权值val和一个讨厌的骑士.如果一个骑士讨厌另一个骑士那么他们将不会一起出战.问出战的骑士最大atk是多少. 注释:$1\l ...

  7. [BZOJ1040] [ZJOI2008]骑士 解题报告

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

  8. BZOJ1040 [ZJOI2008]骑士

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

  9. 【环套树+树形dp】Bzoj1040 [ZJOI2008] 骑士

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

随机推荐

  1. AsyncDisplayKit技术分析

    转载请注明出处:http://xujim.github.io/ios/2014/12/07/AsyncDisplayKit_inside.html ,谢谢 前言 Facebook前段时间发布了其iOS ...

  2. 【读书笔记】你不知道的JavaScript(上卷)--作用域是什么

    第一章 作用域 1.理解作用域 几个名词的介绍 引擎:从头到尾负责整个JavaScript程序的编译及执行过程 编译器:负责语法分析及代码生成器等脏活累活 作用域:负责收集并维护由所有声明的标识符(变 ...

  3. 最大公约数(gcd模板)

    int gcd(int a,int b) { ) { int t=a%b; a=b; b=t; } return a; }

  4. DFS练习-HDU1010

    题目来源:HDU1010 DFS的基本原则已经差不多了,但是一些技巧仍然比较难想,所以还是加强练习,然后总结一下. 还是先看题意 ,指定迷宫的长,宽以及走出迷宫的具体时间N,M,T. 其中(1 < ...

  5. Python线程间事件通知

    Python事件机制 事件机制:这是线程间最简单的通信机制:一个线程发送事件,其他线程等待事件事件机制使用一个内部的标志,使用set方法进行使能为True,使用clear清除为falsewait方法将 ...

  6. pip命令小结

    pip的另一种调用方式 python -m pip通过指定python的名字来指定特定的pip pip freeze > 项目目录/requirements.txt导出pip中下载的包目录 pi ...

  7. docker基础——关于安装、常用指令以及镜像制作初体验

    为什么使用docker docker就是一个轻量级的虚拟机,他解决的是服务迁移部署的时候环境配置问题.比如常见的web服务依赖于jdk.Tomcat.数据库等工具,迁移项目就需要在新的机器重新配置这些 ...

  8. vim+软件安装——06

    vim在命令模式下的操作: 1.上下左右键可以自由走动 2.l 键 光标向右移动一个位置 3.h键 光标向左移动一个位置 4.j键 光标向下移动一行 5.k键 光标向上移动一行 6.^键 光标移动到当 ...

  9. 笔记-python-lib-chardet

    笔记-python-lib-chardet 1.      chardet chardet是一个非常优秀的编码识别模块, 是python的第三方库,需要下载和安装. 文档地址:https://pypi ...

  10. Echarts 解决饼图文字过长重叠的问题

    之前在网上查找了很多关于解决饼图文字描述过长导致重叠的问题,找了很多一直没有一个合适的解决方案,最后自己只能花时间研究echarts文档,功夫不负有心人,终于解决了文字重叠展示不全等问题. 废话不多说 ...