就是有n个点n条边,那么有且只有一个环那么用Dfs把在环上的两个点找到。然后拆开,从这条个点分别作树形Dp即可.

 #include <cstdio>
#include <cstring>
#define LL long long
const LL Maxn=;
struct Edge{LL to,next;}edge[Maxn<<];
LL head[Maxn],F[Maxn],G[Maxn],cnt,U,V,E,vis[Maxn],a[Maxn],n,Ans;
inline void Add(LL u,LL v) {edge[++cnt].to=v;edge[cnt].next=head[u];head[u]=cnt;}
inline LL Max(LL x,LL y) {return x>y?x:y;}
void Dfs(LL u,LL fa)
{
vis[u]=true;
for (LL i=head[u];i!=-;i=edge[i].next)
{
if (edge[i].to==fa) continue;
if (vis[edge[i].to])
{
U=u,V=edge[i].to;
E=i;
continue;
}
Dfs(edge[i].to,u);
}
}
void Dp(LL u,LL fa,LL Ban)
{
F[u]=a[u],G[u]=;
for (LL i=head[u];i!=-;i=edge[i].next)
{
if (i==Ban || (i^)==Ban || edge[i].to==fa) continue;
Dp(edge[i].to,u,Ban);
F[u]+=G[edge[i].to];
G[u]+=Max(F[edge[i].to],G[edge[i].to]);
}
} int main()
{
scanf("%lld",&n);
memset(head,-,sizeof(head)); cnt=;
for (LL i=;i<=n;i++)
{
LL u;
scanf("%lld%lld",&a[i],&u);
Add(u,i),Add(i,u);
} for (LL i=;i<=n;i++)
if (!vis[i])
{
Dfs(i,);
Dp(U,,E);
LL Ret=G[U];
Dp(V,,E);
Ret=Max(Ret,G[V]);
Ans+=Ret;
}
printf("%lld\n",Ans);
return ;
}

C++

BZOJ 1040 树形DP+环套树的更多相关文章

  1. 【BZOJ-1040】骑士 树形DP + 环套树 + DFS

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

  2. BZOJ2878 NOI2012迷失游乐园(树形dp+环套树+概率期望)

    考虑树的部分分怎么做.令f[i]为i向子树内走的期望路径长度,转移比较显然.算答案时先把其父亲的答案弄好就可以统计自己的答案了. 环套树也类似.树里直接dp,对环上点暴力考虑环上的每条路径,算完后再在 ...

  3. HDU 4514 - 湫湫系列故事——设计风景线 - [并查集判无向图环][树形DP求树的直径]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4514 Time Limit: 6000/3000 MS (Java/Others) Memory Li ...

  4. 浅谈关于树形dp求树的直径问题

    在一个有n个节点,n-1条无向边的无向图中,求图中最远两个节点的距离,那么将这个图看做一棵无根树,要求的即是树的直径. 求树的直径主要有两种方法:树形dp和两次bfs/dfs,因为我太菜了不会写后者这 ...

  5. 树形DP 学习笔记(树形DP、树的直径、树的重心)

    前言:寒假讲过树形DP,这次再复习一下. -------------- 基本的树形DP 实现形式 树形DP的主要实现形式是$dfs$.这是因为树的特殊结构决定的——只有确定了儿子,才能决定父亲.划分阶 ...

  6. BZOJ 1040: [ZJOI2008]骑士 [DP 环套树]

    传送门 题意:环套树的最大权独立集 一开始想处理出外向树树形$DP$然后找到环再做个环形$DP$ 然后看了看别人的题解其实只要断开环做两遍树形$DP$就行了...有道理! 注意不连通 然后洛谷时限再次 ...

  7. 【BZOJ】1040: [ZJOI2008]骑士 环套树DP

    [题意]给定n个人的ai和bi,表示第i个人能力值为ai且不能和bi同时选择,求能力值和最大的选择方案.n<=10^6. [算法]环套树DP(基环树) [题解]n个点n条边——基环森林(若干环套 ...

  8. 【BZOJ 3242】 (环套树、线段树+树形DP?)

    3242: [Noi2013]快餐店 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 728  Solved: 390 Description 小T打算 ...

  9. BZOJ 1040 [ZJOI2008]骑士 (基环树+树形DP)

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

随机推荐

  1. java 中Session 持久化问题

    首先: 今天发现了个session 持久化的问题 在Tomcat 停止运行后再启动  session  中保存的东西还会存在 ,百度了一下 原理 1.Session Create 时 2.Sessio ...

  2. YY前端课程2

    1. alt属性对SEO优化很重要 2. 最早的网页是靠table布局标签,后来用div+css进行网页重构(因此现在网页设计的名字由网页设计变成了网页重构) 3. 静态网页和后台没有交互 动态网页和 ...

  3. Node.js 事件循环

    Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高. Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发. Node.j ...

  4. Adb refused a command 解决方法

    原文:How To Fix Android Error Adb Refused A Command 地址:http://downloadfixit.com/android-error-adb-refu ...

  5. js正则表达式大全(2)

    在JAVASCRIPT里面判断一个字符串是否是电子邮件的格式: if(formname.email.value!=formname.email.value.match(/^\w +[@]\w +[.] ...

  6. 【Python④】python恼人的字符串,格式化输出

    恼人的字符串 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小写英文字母.数字和一些符号,这个编码 ...

  7. NPOI 导出Excel2007版本时出现流已关闭问题

    NPOI生产.xlsx文件件时,在使用book.Write(ms);后,会关闭流,这样导致再次使用Respons输出流的时候就出错了. 我看到一些网友提供的解决办法是: public class NP ...

  8. UITableViewCell里面separator的设置

    最近cell显示的时候左边一直有15个像素的偏移,查了下面的方法 //1. 不管用 [self.tableView setSeparatorInset:UIEdgeInsetsZero]; // 2. ...

  9. 配置DelegatingFilterProxy使用Spring管理filter chain

    项目环境:JDK7 + Maven3.04 0. 项目使用springmvc作为controller层 1. 引入spring-security <dependency> <grou ...

  10. 解决iis+php+mysql访问速度慢的方法

    IIS7.5网站访问PHP响应慢的原因原因是PHP5.3以上支持IPv6协议,但是大家的服务器未使用IPv6,当访问PHP的时候会连接MySQL的地址为localhost,系统会会先用IPv6连接,但 ...