其实已经准备退役了,但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. hdu_5288_OO’s Sequence

    OO has got a array A of size n ,defined a function f(l,r) represent the number of i (l<=i<=r) ...

  2. VMware中Ubuntu开机时停在启动界面,不进入X-window的解决办法

    启动Ubuntu虚拟机时,停在这个画面不动: 试了若干次,都是这样.尝试了新建一个虚拟机然后把.vmdk文件拷过去启动,无法解决. 尝试重启,在这个界面按esc进入grub: 选择恢复模式 recov ...

  3. python实现简单分类knn算法

    原理:计算当前点(无label,一般为测试集)和其他每个点(有label,一般为训练集)的距离并升序排序,选取k个最小距离的点,根据这k个点对应的类别进行投票,票数最多的类别的即为该点所对应的类别.代 ...

  4. dts--framework(三)

    tester.py class Tester(Crb) 00. __init__(self, crb, serializer) 01.init_ext_gen(self) 02.set_re_run( ...

  5. PHP 微信公众号之客服完整讲解

    //获取access_token private static function get_access_token($app_id) { $getAuthorizerInfo = wx_auth::g ...

  6. Aizu:0005-GCD and LCM

    GCD and LCM Time limit 1000 ms Memory limit 131072 kB Problem Description Write a program which comp ...

  7. spark中的RDD以及DAG

    今天,我们就先聊一下spark中的DAG以及RDD的相关的内容 1.DAG:有向无环图:有方向,无闭环,代表着数据的流向,这个DAG的边界则是Action方法的执行 2.如何将DAG切分stage,s ...

  8. Myeclipse代码格式化的样式和保存自动格式化

    第一种方法:下载格式化代码样式文件,参考这位老兄的方法(包含了保存自动格式化):http://blog.csdn.net/u010028869/article/details/49780515   下 ...

  9. 3771: Triple

    3771: Triple 链接 题意 n个斧头,每个斧头的价值都不同(开始时没注意到),可以取1个,2个,3个斧头组成不同的价值,求每种价值有多少种组成方案(顺序不同算一种) 分析: 生成函数 + 容 ...

  10. P1297 网线切割

    P1297 网线切割 题目描述 Wonderland居民决定举行一届地区性程序设计大赛.仲裁委员会志愿负责这次赛事并且保证会组织一次有史以来最公正的比赛.为此,所有参赛者的电脑和网络中心会以星状网络连 ...