这种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. iOS 制作发布证书,发布到App Store

    ---恢复内容开始--- 1.登陆 iOS Dev Center 选择进入iOS Provisioning Portal. 2.在 iOS Provisioning Portal中,点击App IDs ...

  2. 根据id设置、获取元素的文本和value

    /** * 根据id获取元素文本 * @param {String} id|元素id * return {Integer || String} text */function getText(id){ ...

  3. DAG模型——硬币问题

    硬币问题 有n种硬币,面值分别为V1,V2,...,Vn,每种都有无限多.给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值.1<=n<=100, 0& ...

  4. (转)Object-C 中各数据类型转换 NSData转NSString,Byte,UIImage

    ,NSData 与 NSString NSData --> NSString NSString *aString = [[NSString alloc] initWithData:adata e ...

  5. nginx 自定义代理返回 404

    在nginx的http段,加上一面的配置 proxy_intercept_errors on;//自定义代理返回的404错误提示

  6. Linux 经典面试题

    [Linux  经典面试题] 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文 ...

  7. 【原创】Linux 内核模块编程

    sudo gedit hello.c #include <linux/module.h> #include <linux/kernel.h> #include <linu ...

  8. Linq的简单查询

    Ling的简单查询,记在这里防止忘记,以便随时能够查看 List<int> intArr = new List<int>(); || i == select i; List&l ...

  9. Git 的基本配置

    用户信息 你个人的用户名称和电子邮件地址,用户名可随意修改,git 用于记录是谁提交了更新,以及更新人的联系方式. $ git config --global user.name "Donl ...

  10. C语言中输入输出格式控制

    1.C语言中,非零值为真,真用1表示:零值为假,假用0表示. 2.转义字符参考: \a 蜂鸣,响铃 \b 回退:向后退一格 \f 换页 \n 换行 \r 回车,光标到本行行首 \t 水平制表 \v 垂 ...