题目传送门:https://loj.ac/problem/10096

-------------------------------------------------------------------------------------------------------

强联通分量内的ATM只要有一个可以抢到就都可以抢到的,所以要缩点。

当然,要统计整个分量内可以抢到的钱的和。

分量内只要有一个路口有酒吧,那么这个分量就可以作为结束点进行庆祝,所以要统计每个分量内是否有酒吧。

然后在缩点后的有向无环图上进行拓扑排序,然后进行DP,求出到每个分量可以抢到的最大钱数。

最后把所有抢到钱的分量中,求出有酒吧且最大的就是答案。

-------------------------------------------------------------------------------------------------------

 1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=5e5+10;
4 const int maxm=5e5+10;
5 int n,m;
6 struct edge
7 {
8 int u,v,nxt;
9 }e[maxm],ee[maxm];
10 int head[maxn],js,headd[maxn],jss;
11 void addage(edge e[],int head[],int &js,int u,int v)
12 {
13 e[++js].u=u;e[js].v=v;
14 e[js].nxt=head[u];head[u]=js;
15 }
16 int dfn[maxn],low[maxn],st[maxn],top,cnt,lt[maxn],lts;
17 void tarjan(int u)
18 {
19 dfn[u]=low[u]=++cnt;
20 st[++top]=u;
21 for(int i=head[u];i;i=e[i].nxt)
22 {
23 int v=e[i].v;
24 if(!dfn[v])
25 {
26 tarjan(v);
27 low[u]=min(low[u],low[v]);
28 }
29 else if(!lt[v])
30 low[u]=min(low[u],dfn[v]);
31 }
32 if(dfn[u]==low[u])
33 {
34 lt[u]=++lts;
35 while(st[top]!=u)lt[st[top--]]=lts;
36 --top;
37 }
38 }
39 int money[maxn],moneys[maxn],s,p;
40 bool isp[maxn],isps[maxn];
41 int f[maxn];
42 bool inq[maxn];
43 queue<int>q;
44 void dfs(int x)
45 {
46 q.push(x);
47 while(!q.empty())
48 {
49 int u=q.front();q.pop();inq[u]=0;
50 for(int i=headd[u];i;i=ee[i].nxt)
51 {
52 int v=ee[i].v;
53 if(f[u]+moneys[v]>f[v])
54 {
55 f[v]=f[u]+moneys[v];
56 if(!inq[v])
57 {
58 q.push(v);
59 inq[v]=1;
60 }
61 }
62 }
63 }
64 }
65 int main()
66 {
67 scanf("%d%d",&n,&m);
68 for(int u,v,i=0;i<m;++i)
69 {
70 scanf("%d%d",&u,&v);
71 addage(e,head,js,u,v);
72 }
73 for(int i=1;i<=n;++i)scanf("%d",money+i);
74 scanf("%d%d",&s,&p);
75 for(int x,i=0;i<p;++i)
76 {
77 scanf("%d",&x);
78 isp[x]=1;
79 }
80 for(int i=1;i<=n;++i)
81 if(!dfn[i])tarjan(i);
82 for(int i=1;i<=n;++i)
83 {
84 moneys[lt[i]]+=money[i];
85 if(isp[i])isps[lt[i]]=1;
86 }
87 for(int u=1;u<=n;++u)
88 for(int i=head[u];i;i=e[i].nxt)
89 {
90 int v=e[i].v;
91 if(lt[u]!=lt[v])addage(ee,headd,jss,lt[u],lt[v]);
92 }
93 f[lt[s]]=moneys[lt[s]];
94 dfs(lt[s]);
95 int ans=0;
96 for(int i=1;i<=lts;++i)if(isps[i])ans=max(ans,f[i]);
97 cout<<ans;
98 return 0;
99 }

LOJ10096掠夺计划的更多相关文章

  1. 【声明】前方不设坑位,不收费!~ 我为NET狂官方学习计划

    发个通知,过段时间学习计划相关的东西就出来了,上次写了篇指引文章后有些好奇心颇重的人跟我说:“发现最近群知识库和技能库更新的频率有点大,这是要放大招的节奏啊!” 很多想学习却不知道如何规划的人想要一个 ...

  2. SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)

    前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ...

  3. ORACLE从共享池删除指定SQL的执行计划

    Oracle 11g在DBMS_SHARED_POOL包中引入了一个名为PURGE的新存储过程,用于从对象库缓存中刷新特定对象,例如游标,包,序列,触发器等.也就是说可以删除.清理特定SQL的执行计划 ...

  4. 解析大型.NET ERP系统核心组件 查询设计器 报表设计器 窗体设计器 工作流设计器 任务计划设计器

    企业管理软件包含一些公共的组件,这些基础的组件在每个新项目立项阶段就必须考虑.核心的稳定不变功能,方便系统开发与维护,也为系统二次开发提供了诸多便利.比如通用权限管理系统,通用附件管理,通用查询等组件 ...

  5. MSSQLSERVER执行计划详解

    序言 本篇主要目的有二: 1.看懂t-sql的执行计划,明白执行计划中的一些常识. 2.能够分析执行计划,找到优化sql性能的思路或方案. 如果你对sql查询优化的理解或常识不是很深入,那么推荐几骗博 ...

  6. SQL Server-聚焦使用索引和查询执行计划(五)

    前言 上一篇我们讲了聚集索引对非聚集索引的影响,对数据库一直在强调的性能优化,所以这一节我们统筹讲讲利用索引来看看查询执行计划是怎样的,简短的内容,深入的理解,Always to review the ...

  7. SQL Tuning 基础概述03 - 使用sql_trace和10046事件跟踪执行计划

    1.使用sql_trace跟踪执行计划 1.1 当前session跟踪: alter session set sql_trace = true; //开始sql_trace alter session ...

  8. SELECT TOP 1 比不加TOP 1 慢的原因分析以及SELECT TOP 1语句执行计划预估原理

    本文出处:http://www.cnblogs.com/wy123/p/6082338.html 现实中遇到过到这么一种情况: 在某些特殊场景下:进行查询的时候,加了TOP 1比不加TOP 1要慢(而 ...

  9. SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)

    本文出处:http://www.cnblogs.com/wy123/p/6008477.html 关于统计信息对数据行数做预估,之前写过对非相关列(单独或者单独的索引列)进行预估时候的算法,参考这里. ...

随机推荐

  1. java日常工作错误总结

    1.将一个新的项目拷贝到另一台电脑上,放入tomcat中运行找不到路径,报错404.重新创建一个servlet运行就可以正常访问到. 2.但上传的文件过大时上传文件会报404错误 把<prope ...

  2. 强大的动态SQL

    1 动态SQL# 那么,问题来了: 什么是动态SQL? 动态SQL有什么作用? 传统的使用JDBC的方法,相信大家在组合复杂的的SQL语句的时候,需要去拼接,稍不注意哪怕少了个空格,都会导致错误.My ...

  3. sql字段拆分 ,连表子查询获取值

    1.连表子查询获取值 select bas.name,bas.id_card_num,bas.mobil_no,gender,bas.birthday,bas.height,bas.weight,pr ...

  4. Mysql 8.0 相关命令

    1.dos窗口命令登陆. 管理员/普通用户登陆(账号/密码:root/rootpwd) mysql -hlocalhost -uroot -prootpwd 普通用户登陆(root管理员的不可以使用这 ...

  5. 1.简单使用两片74HC595实现动态显示数码管

    本篇文章主要是讲解如何简单示用74HC595,更具体的讲解请移步 https://www.cnblogs.com/lulipro/p/5067835.html#undefined 这篇文章讲解的更加详 ...

  6. ASP.NET Core路由中间件[3]: 终结点(Endpoint)

    到目前为止,ASP.NET Core提供了两种不同的路由解决方案.传统的路由系统以IRouter对象为核心,我们姑且将其称为IRouter路由.本章介绍的是最早发布于ASP.NET Core 2.2中 ...

  7. mysql performance storage engine

    mysql performance storage engine 概要 mysql的运行时状态记录的存储引擎,实现了PSI(Performance Storage Interface) 通过WITH_ ...

  8. ES6 class类 静态方法及类的继承

    一.class类 ES6之前都是定义函数以及函数的原型对象实现类型, 如果想要实现共享构造函数成员,可以用prototype来共享实现 ES6出现之后,使用class类的概念来实现原型的继承 二,静态 ...

  9. [不止于代码]Unraid基本使用速记

    1.Unraid简介 Unraid是一个虚拟机系统,类似于VM.PVE,但又区别于前二者.通过Unraid的Dokcer可以快速构建类Nas及虚拟机环境,也可虚拟黑群晖使用,可以使用磁盘阵列,保护你的 ...

  10. 浅析 MVC Pattern

    一.前言 最近做CAD插件相关的工作,用到了一些模式,解决对应场景的问题. 比如插件的运行实例上使用Singleton.实例内部使用了MVC(Strategy and Observer ). 针对CA ...