论环形dp的重要!

其实这个环比较简单,稍微分析一下就知道,

这是一个简单环,并且每个联通块里只含有一个。

我觉得把处理环的关键,就是要找出环形和线形(树形)有什么区别。

如果我们从某处断开的做dp的话,转移的结果只对根节点有影响(不确定);

然后我猜测应该只要找到环上相邻两点然后断开分别以他们为根做treedp就可以了

结果真的是这样……

总感觉缺点什么……

有待进一步思考……

 type node=record
       point,next:longint;
     end; var edge:array[..] of node;
    can:array[..] of boolean;
    v:array[..] of boolean;
    p,w:array[..] of longint;
    f:array[..,..] of int64;
    len,find,n,u,z,i:longint;
    ans,res:int64; function max(a,b:int64):int64;
  begin
    if a>b then exit(a) else exit(b);
  end; procedure add(x,y:longint);
  begin
    inc(len);
    edge[len].point:=y;
    edge[len].next:=p[x];
    can[len]:=true;
    p[x]:=len;
  end; procedure dfs(x:longint);   //找环
  var i,y:longint;
  begin
    v[x]:=true;
    i:=p[x];
    while i<>- do
    begin
      y:=edge[i].point;
      if can[i] and not v[y] then   
      begin
        can[i xor ]:=false;   //注意防止因为同一条边而回头
        dfs(y);
        can[i xor ]:=true;    //解除标记
      end
      else if can[i] and v[y] then
      begin
        u:=x;
        z:=y;
        find:=i;
      end;
      i:=edge[i].next;
    end;
  end; procedure treedp(x:longint);
  var i,y:longint;
  begin
    i:=p[x];
    f[x,]:=;
    f[x,]:=w[x];
    while i<>- do
    begin
      y:=edge[i].point;
      if can[i] then   
      begin
        can[i xor ]:=false;
        treedp(y);
        can[i xor ]:=true;
        f[x,]:=f[x,]+max(f[y,],f[y,]);  //基本的treedp
        f[x,]:=f[x,]+f[y,];
      end;
      i:=edge[i].next;
    end;
  end; procedure dp(i:longint);
  begin
    dfs(i);
    can[find]:=false;    //断开
    can[find xor ]:=false;
    treedp(u);
    res:=f[u,];
    treedp(z);
    ans:=ans+max(f[z,],res);  //都是不取根,这里是凭感觉写的,欢迎指教
  end; begin
  len:=-;
  readln(n);
  fillchar(p,sizeof(p),);
  for i:= to n do
  begin
    readln(w[i],z);
    add(z,i);
    add(i,z);
  end;
  for i:= to n do
    if not v[i] then dp(i);
  writeln(ans);
end.

bzoj1040的更多相关文章

  1. 【bzoj1040】骑士

    [bzoj1040]骑士 题意 给定一个基环森林,求最大独立集. 分析 其实这是一道一年前做过的题. 只是今天在看bzoj1023的时候突然来了几许兴致,回过头来看一看. 如果对于一棵树的最大独立集, ...

  2. 【BZOJ1040】骑士(动态规划)

    [BZOJ1040]骑士(动态规划) 题面 BZOJ 题解 对于每一组厌恶的关系 显然是连边操作 如果是一棵树的话 很显然的树型\(dp\) 但是,现在相当于有很多个基环 也就是在一棵树的基础上再加了 ...

  3. 【bzoj1040】 ZJOI2008—骑士

    http://www.lydsy.com/JudgeOnline/problem.php?id=1040 (题目链接) 题意 一个基环森林,从中选出不相邻的若干个点使得这些点的点权和最大. Solut ...

  4. 【BZOJ1040】[ZJOI2008]骑士 树形DP

    [BZOJ1040][ZJOI2008]骑士 Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情 ...

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

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

  6. 【bzoj1040】骑士[ZJOI2008](树形dp)

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1040 这道题,很明显根据仇恨关系构造出的图形是一堆环套树.如果是普通的树,就可以马上裸树 ...

  7. bzoj1040 基环树上dp

    [bzoj1040][ZJOI2008]骑士 2014年2月26日5,2040 Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各 ...

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

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

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

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

  10. BZOJ1040 [ZJOI2008]骑士

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

随机推荐

  1. SVG实现描边动画

    说起SVG,我是恨它又爱它,恨它是因为刚开始接触的时候自己傻B地想用代码去写它,其实在web上我们用它做交互也只是用了几个常用的特性而已,其他的标签知道这么一回事就成了,其实说白了它就是一种图片格式, ...

  2. Centos7安装并配置mysql5.6完美教程

    Centos7安装并配置mysql5.6完美教程 Centos7将默认数据库mysql替换成了Mariadb,对于我们这些还想使用mysql的开发人员来说并不是一个好消息.然而,网上关于Linux安装 ...

  3. OpenJudge/Poj 1004 Financial Management

    1.链接地址: http://poj.org/problem?id=1004 http://bailian.openjudge.cn/practice/1004 2.题目: 总时间限制: 1000ms ...

  4. PHP连接sqlserver的两种方法,向sqlserver2000中写入数据,中文乱码

    项目环境是php5.3.28 项目用的ThinkPHP3.2.3  已经mysql5.5数据库,要和另一个项目对接,需要连接sqlsever2000数据库进行一些操作. 第一种用php自带扩展连接数据 ...

  5. PC软件-实用工具 True Launch Bar

    True Launch Bar 官网 增强及自定义window任务栏快捷方式管理. 有免费版的Free Launch Bar 官网

  6. jQuery 选择器(转)

    jQuery 选择器 选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id="lastname" 的元 ...

  7. 转.....IOC 和DI

    引述:IoC(控制反转:Inverse of Control)是Spring容器的内核,AOP.声明式事务等功能在此基础上开花结果.但是IoC这个重要的概念却比较晦涩隐讳,不容易让人望文生义,这不能不 ...

  8. animation css3动画与CSS3 @keyframes担配使用创建往复平缓动画

    通过 @keyframes 规则,您能够创建动画. 创建动画的原理是,将一套 CSS 样式逐渐变化为另一套样式. 在动画过程中,您能够多次改变这套 CSS 样式. 以百分比来规定改变发生的时间,或者通 ...

  9. Magento Api 记录

    magento api 首次接触 (-) /** * magento Api 身份验证 调用示例 * Example of simple product POST using Admin accoun ...

  10. nginx错误日志error_log日志级别

    error_log 级别分为 debug, info, notice, warn, error, crit  默认为crit,