题意:一个n个点m条单向边的图,每个点有权值,给定出发点和p个可以停止的点,你可以随便走一条路径从出发点走到一个可以停止的点,但是每个点的点权只能计算一次,求能得到的最大权值。

n,m<=500000

题解:tarjan缩点,然后树形dp。显然强联通分量里每一个点都可以乱走(为所欲为)

  1. #include<cstdio>
  2. #include<iostream>
  3. #define INF 2000000000
  4. using namespace std;
  5. inline int read()
  6. {
  7. int x=,f=;char ch=getchar();
  8. while(ch<''||ch>''){if(ch=='-') f=-;ch=getchar();}
  9. while(ch>=''&&ch<=''){x=x*+ch-''; ch=getchar();}
  10. return x*f;
  11. }
  12.  
  13. bool b[],inq[];
  14. int cnt=,n,m,cc,s[],dfn[],low[],rt,top=,dn=;
  15. int head[],f[],q[],bel[];
  16. struct edge{
  17. int to,next;
  18. }e[];
  19.  
  20. void ins(int f,int t){e[++cnt].next=head[f];head[f]=cnt;e[cnt].to=t;}
  21.  
  22. void tarjan(int x)
  23. {
  24. dfn[x]=low[x]=++dn;q[++top]=x;inq[x]=;
  25. for(int i=head[x];i;i=e[i].next)
  26. if(!dfn[e[i].to]){tarjan(e[i].to);low[x]=min(low[x],low[e[i].to]);}
  27. else {if(inq[e[i].to]) low[x]=min(low[x],dfn[e[i].to]);}
  28. if(dfn[x]==low[x])
  29. for(++cc;q[top+]!=x;bel[q[top]]=cc,s[cc]+=s[q[top]],b[cc]|=b[q[top]],inq[q[top--]]=);
  30. }
  31.  
  32. void dp(int x)
  33. {
  34. if(b[x])f[x]=s[x];else f[x]=-INF;
  35. for(int i=head[x];i;i=e[i].next) {if(!f[e[i].to])dp(e[i].to);f[x]=max(f[x],f[e[i].to]+s[x]);}
  36. }
  37.  
  38. int main()
  39. {
  40. cc=n=read();m=read();
  41. for(int i=;i<=m;i++){int u=read(),v=read();ins(u,v);}
  42. for(int i=;i<=n;i++)s[i]=read();
  43. rt=read();m=read();
  44. for(int i=;i<=m;i++)b[read()]=;
  45. for(int i=;i<=n;i++)if(!dfn[i])tarjan(i);
  46. for(int i=;i<=n;i++)for(int j=head[i];j;j=e[j].next)
  47. if(bel[i]!=bel[e[j].to])ins(bel[i],bel[e[j].to]);
  48. dp(bel[rt]);
  49. cout<<f[bel[rt]];
  50. return ;
  51. }

[Apio2009][bzoj1179]Atm的更多相关文章

  1. 【Apio2009】Bzoj1179 Atm

    目录 List Description Input Output Sample Input Sample Output HINT Solution Code Dfs 记忆化搜索 Position: h ...

  2. BZOJ1179 Atm //缩点+spfa

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

  3. bzoj1179 Atm

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

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

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

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

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

  6. BZOJ1179 [Apio2009]Atm 【tarjan缩点】

    1179: [Apio2009]Atm Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 4048  Solved: 1762 [Submit][Sta ...

  7. BZOJ1179 : [Apio2009]Atm 缩点+spfa

    1179: [Apio2009]Atm Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 2069  Solved: 826[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. HTTP协议中PUT和POST使用区别

          有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源:有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源:还有的观点认为可以用PUT和POST中任何一个来做创 ...

  2. 面试必问---HashMap原理分析

    一.HashMap的原理 众所周知,HashMap是用来存储Key-Value键值对的一种集合,这个键值对也叫做Entry,而每个Entry都是存储在数组当中,因此这个数组就是HashMap的主干.H ...

  3. ThreadLocal源码分析:(二)get()方法

    在ThreadLocal的get(),set()的时候都会清除线程ThreadLocalMap里所有key为null的value. 而ThreadLocal的remove()方法会先将Entry中对k ...

  4. Python 简单聊天室

    #coding=utf-8 from socket import * from threading import Thread import time udpSocket = socket(AF_IN ...

  5. Spark学习笔记之RDD中的Transformation和Action函数

    总算可以开始写第一篇技术博客了,就从学习Spark开始吧.之前阅读了很多关于Spark的文章,对Spark的工作机制及编程模型有了一定了解,下面把Spark中对RDD的常用操作函数做一下总结,以pys ...

  6. 第三章Hibernate关联映射

    第三章Hibernate关联映射 一.关联关系 类与类之间最普通的关系就是关联关系,而且关联是有方向的. 以部门和员工为列,一个部门下有多个员工,而一个员工只能属于一个部门,从员工到部门就是多对一关联 ...

  7. Linq 连接运算符:Concat

    //Concat()方法附加两个相同类型的序列,并返回一个新序列(集合)IList<string> strList = new List<string>() { "O ...

  8. groovy入门(2-1)Groovy的Maven插件安装:Plugin execution not covered by lifecycle configuration

    参考链接:http://www.cnblogs.com/rightmin/p/4945797.html 1.引入groovy的jar包 2.引入groovy编译插件 3.遇到问题 Plugin exe ...

  9. 新概念英语(1-25)Mrs. Smith's Kitchen

    What colour is the electric cooker? Mrs. Smith's Kitchen is small. There is a refrigerator in the ki ...

  10. MYSQL之索引原理与慢查询优化

    一.索引 1.介绍 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的也是最容易出现问题的,还是一些复杂的查询操作,因此对查询语句的优化 ...