这种tarjan+dp的水题我竟然还WA了两次,要小心!

 type link=^node;
     node=record
       po:longint;
       next:link;
     end; var rd,be,st,v,a,dp,dfn,low:array[..] of longint;
    f,b,bar:array[..] of boolean;
    edge,way:array[..] of link;
    h,t,i,n,m,beg,bs,s,x,y:longint;
    p:link; procedure add(y:longint;var q:link);
  var p:link;
  begin
    new(p);
    p^.po:=y;
    p^.next:=q;
    q:=p;
  end; function max(a,b:longint):longint;
  begin
    if a>b then exit(a) else exit(b);
  end; function min(a,b:longint):longint;
  begin
    if a>b then exit(b) else exit(a);
  end; procedure tarjan(x:longint);
  var y:longint;
      p:link;   begin
    inc(h);
    inc(t);
    st[t]:=x;
    dfn[x]:=h;
    low[x]:=h;
    f[x]:=true;
    p:=way[x];
    while p<>nil do
    begin
      y:=p^.po;
      if dfn[y]= then
      begin
        tarjan(y);
        low[x]:=min(low[x],low[y]);
      end
      else if f[y] then low[x]:=min(low[x],low[y]);
      p:=p^.next;
    end;
    if dfn[x]=low[x] then
    begin
      inc(s);
      while st[t+]<>x do
      begin
        y:=st[t];
        f[y]:=false;
        be[y]:=s;
        v[s]:=v[s]+a[y];
        dec(t);
      end;
    end;
  end; begin
  readln(n,m);
  for i:= to m do
  begin
    readln(x,y);
    add(y,way[x]);
  end;
  for i:= to n do
    readln(a[i]);   readln(beg,bs);
  for i:= to bs do
  begin
    read(x);
    b[x]:=true;
  end;   for i:= to n do
    if dfn[i]= then
    begin
      h:=;
      t:=;
      tarjan(i);
    end;   for i:= to n do
  begin
    p:=way[i];
    while p<>nil do
    begin
      y:=p^.po;
      if be[i]<>be[y] then
      begin
        add(be[i],edge[be[y]]);
        inc(rd[be[i]]);
      end;
      p:=p^.next;
    end;
    if b[i] then bar[be[i]]:=true;
  end;   t:=;
  for i:= to s do
    if rd[i]= then
    begin
      inc(t);
      st[t]:=i;
    end;   h:=;
  while h<=t do
  begin
    x:=st[h];
    dp[x]:=max(dp[x],v[x]);
    p:=edge[x];
    while p<>nil do
    begin
      y:=p^.po;
      if bar[x] then
      begin
        dp[y]:=max(dp[y],dp[x]+v[y]);
        bar[y]:=true;
      end;
      dec(rd[y]);
      if rd[y]= then
      begin
        inc(t);
        st[t]:=y;
      end;
      p:=p^.next;
    end;
    inc(h);
  end;
  writeln(dp[be[beg]]);
end.

bzoj1179的更多相关文章

  1. 【bzoj1179】 Apio2009—Atm

    www.lydsy.com/JudgeOnline/problem.php?id=1179 (题目链接) 题意 给出一张有向图,每个节点有点权.标记一些点,找出一条路径,可以重复经过一条边,使得总点权 ...

  2. BZOJ1179 [Apio2009]Atm Tarjan 强连通缩点 动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1179 题意概括 有一个有向图,每一个节点有一个权值,其中有一些结束点. 现在,你要从S出发,到达任 ...

  3. [BZOJ1177][BZOJ1178][BZOJ1179]APIO2009解题报告

    抱着好奇心态去开始做APIO的往年试题感受一下难度 Oil Description 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地 ...

  4. [BZOJ1179][APIO2009][强连通分量Tarjan+spfa]ATM

    [BZOJ1179][APIO2009]ATM Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i ...

  5. bzoj1179(Atm)

    ---恢复内容开始--- 1179: [Apio2009]Atm Time Limit: 15 Sec  Memory Limit: 162 MB Description Input 第一行包含两个整 ...

  6. BZOJ1179 Atm //缩点+spfa

    1179: [Apio2009]Atm Description Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的 ...

  7. 【BZOJ-1179】Atm Tarjan + SPFA

    1179: [Apio2009]Atm Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 2407  Solved: 993[Submit][Status ...

  8. bzoj1179 [Apio2009]Atm

    Description Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口 ...

  9. 【BZOJ1179】 [Apio2009]Atm tarjan缩点+SPFA

    Description Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口 ...

随机推荐

  1. android线程池ThreadPoolExecutor的理解

    android线程池ThreadPoolExecutor的理解 线程池 我自己理解看来.线程池顾名思义就是一个容器的意思,容纳的就是ThreadorRunable, 注意:每一个线程都是需要CPU分配 ...

  2. APP评价(星星点赞)很简单

    1.用代码或者storyboard创建5个button(现在一般都是5个星星) 我用的是storyboard 记得一定要设置button的tag值 在.h中 @property (weak, nona ...

  3. map容器对象插入数据的4种方式

    #include <string> #include <iostream>  #include <map>  #include <utility>  u ...

  4. UITextAlignmentCenter' is deprecated: first deprecated in iOS 6.0

  5. 页面mask css

    <html> <head> <style type="text/css"> .share_mask { position: fixed; top ...

  6. python 自动化之路 day 面向对象基础

    1.面向對象基础概述 面向过程: 根据业务逻辑从上到下垒代码(如果程序修改,对于依赖的过程都需要进行修改.) 函数式: 将某功能代码封装到函数中,如后便无需重复编写,仅需要调用函数即可 面向对象: 世 ...

  7. 深度优化LNMP之Nginx [2]

    深度优化LNMP之Nginx [2]   配置Nginx gzip 压缩实现性能优化 1.Nginx gzip压缩功能介绍        Nginx gzuo压缩模块提供了压缩文件内容的功能,用户请求 ...

  8. Linux下通过软链接转移mysql目录,解决分区空间不足(转)

    http://darwinclub.info/wp/?p=454(转) 当存放数据库分区的空间不足时,可以采取对数据库目录进行迁移的方法,具体步骤如下:1.先关闭数据库mysqladmin -p sh ...

  9. thinkphp 整合 ucenter

    http://xcodebox.com/2013/06/8855.html 参考 1   ucenter源码目录下 /advanced/examples/api目录 copy到thinkphp项目根目 ...

  10. yaffs2文件系统

    1 .yaffs2源码目录文件复制到需要移植的linux内核目录fs/下 同时替换掉源码文件中的Makefile文件跟Kconfig文件. 2.在内核中添加对yaffs2的支持. 3.在make me ...