其实已经准备退役了,但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. 线段树的应用xx中学模拟lites

    跟昨天那个自己写的,没有按照模板来的一看风格就不相类似,今天模拟赛的时候就是用的我的那个自己YY的代码,才拿了10分.个人认为关键的问题应该在于对于数据的处理太过繁琐了,所以回来之后,就拿了大佬的程序 ...

  2. hdu 2828 Buy Tickets

    Buy Tickets Time Limit : 8000/4000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Total ...

  3. linux安装openldap步骤

    目录 虚拟机环境:centos 7 一.环境准备 1.关闭 selinux firewalld 临时: setenforce 0  永久: vi /etc/sysconfig/selinux SELI ...

  4. python__高级 : 类的__getattribute__ 方法

    在类 里面,其实并没有方法这个东西,所有的东西都保存在属性里面,所谓的调用方法其实是类里面的一个同名属性指向了一个函数(方法),返回的是函数的引用,再用   函数()    这种方式就可以调用它 在调 ...

  5. Redis ---------- Sort Set排序集合类型

    sortset是(list)和(set)的集中体现 与set的相同点: string类型元素的集合 不同点: sortset的元素:值+权 适合场合 获得最热门前5个帖子的信息 例如 select * ...

  6. 初试PHP连接sql server

    最开始想使用 pdo_sqlsrv 拓展,但是一直没成功,本文采用的是 pdo_dblib + freetds. 环境:CentOS 6.8.PHP 5.6.20 freetds wget ftp:/ ...

  7. python如果想输出原格式的内容,可以加''' ''',占位符使用方式

    print('我考了%d分'%20) msg=''' ---------info of %s----------- name: %s age: %d #字符串不能放到%d处 job: %s salar ...

  8. iOS-UICollectionViewController 介绍

    废话不多说,列几个列子 (几种情况下的做法): 情景一: 介绍:1. 在UIViewController 上加 UICollectionView (用代码 创建 UICollectionView). ...

  9. [CodeForces954G]Castle Defense(二分答案+差分)

    Description 题目链接 Solution 二分答案,套一个差分标记即可 每次放弓箭手显然越右边越优 Code #include <cstdio> #include <alg ...

  10. 使用perl发邮件

    如果你使用的是 window 系统,没有 sendmail 工具.这时你就可以使用 perl 的 MIME:Lite 模块作为邮件客户端来发送邮件. 这里我们直接用 cpan 来安装(需要 root ...