这种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. 几种JavaScript富应用MVC MVVM框架

    Ember.js.Backbone.js.Knockout.js.Spine.js.Batman.js , Angular.js 前端中的MVVM设计模式让UI与数据模型可以很轻松的相互更新,这意味着 ...

  2. Core Data(数据持久化)

    Core Data可能是OS X和iOS中最容易被误解的框架之一了.为了帮助大家理解,我们将快速研究Core Data,来看一下它是关于什么的.为了正确使用Core Data, 有必要理解其概念.几乎 ...

  3. MySql免安装版配置方法

    第1步:下载如下图安装包 第2步:解压mysql压缩包,然后进入解压后的安装包 将my-default.ini复制一份,并改名为my.ini(我已经完成) 把下面内容复制到my.ini,并保存 [cl ...

  4. 浪潮MegaCli

    再总结: 一般,清RAID再做RAID,安装完毕后: ./MegaCli64 -PDList -aALL | egrep 'Slot|Enclosure Device'                 ...

  5. UDP协议疑难杂症全景解析

    转载:http://blog.csdn.net/dog250/article/details/6896949 UDP协议疑难杂症全景解析 2011-10-22 19:26 2989人阅读 评论(4)  ...

  6. 思维导图软件VYM

    http://www.insilmaril.de/vym/ 点击打开链接http://www.oschina.net/p/vym 有人说VYM就跟目录是一回事,确实是这样, 只不过与excel之类的比 ...

  7. 这 30 类 CSS 选择器,你必须理解!

    CSS 选择器是一种模式,用于选择需要添加样式的元素.平时使用最多也是最简单的就是 #id..class 和标签选择器,在 CSS 中还有很多更加强大更加灵活的选择方式,尤其是在 CSS3 中,增加了 ...

  8. 如何判断list中是否包含某个元素

    在python中可以通过in和not in关键字来判读一个list中是否包含一个元素: str = ['s','i','m','o','n'] if 'e' in str: print("e ...

  9. 服务器端启动soket多线程

    方法一: Socket socket=null try{ ServerSocket serversocket=nwe ServerSocket(8080) while(true){ socket=se ...

  10. 【python】三个变量互换值

    >>> x = 1>>> y = 2>>> z = 3>>> y3>>> z1 大写的帅字! (来自小甲鱼习题 ...