题目传送门: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. [leetcode]203. Remove Linked List Elements链表中删除节点

    这道题很基础也很重要 重点就是设置超前节点 public ListNode removeElements(ListNode head, int val) { //超前节点 ListNode pre = ...

  2. salesforce零基础学习(九十九)Salesforce Data Skew(数据倾斜)

    本篇参考: https://developer.salesforce.com/blogs/engineering/2013/04/managing-lookup-skew-to-avoid-recor ...

  3. 浅谈Java并发编程系列(八)—— LockSupport原理剖析

    LockSupport 用法简介 LockSupport 和 CAS 是Java并发包中很多并发工具控制机制的基础,它们底层其实都是依赖Unsafe实现. LockSupport是用来创建锁和其他同步 ...

  4. IDEA中配置Git,在Github上clone项目到IDEA

    一.安装git 1.用homebrew安装git 运行以下命令安装 brew install git 默认的安装位置是 /usr/local/Cellar目录中(后面会用到) 二.在idea中配置Gi ...

  5. 智能佳机械软手智能研究版 QB SOFTHAND Research

    ​   智能佳机械软手智能研究版是一种基于软机器人技术的拟人机器人手,灵活.适应性强,能够与周围环境.物体和人类进行交互,同时限制伤害操作员.破坏要处理的产品和破坏机器人本身的风险. 智能佳机械软手智 ...

  6. Beta冲刺——第十天(补发)

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE1 这个作业要求在哪里 https://edu.cnblogs.com/campus/fz ...

  7. git版本回滚

    本地版本回滚 git reset --hard <版本号> (git log 可查看版本号,版本号不用写全) 远程仓库版本回滚 先在本地将版本回滚 ,然后git push -f 强制提交

  8. 彻底搞懂JavaScript的闭包、防抖跟节流

    最近出去面试了一下,收获颇多!!! 以前的我,追求实际,比较追求实用价值,然而最近面试,传说中的面试造火箭,工作拧螺丝,竟然被我遇到了.虽然很多知识点在实际工作中并不经常用到,但人家就是靠这个来筛选人 ...

  9. JMeter如何设置语言为中文

    一.现象 JMeter安装后,默认语言为英文,如下图所示: 对于英文水平一般的人来说,刚开始使用起来比较费劲(比如我),影响我工作效率.那么,怎么将英文改为中文呢? 二.解决方法 1.修改设置 点击菜 ...

  10. 【MyBatis】MyBatis CRUD

    MyBtis CRUD 文章源码 基于代理 DAO 的 CRUD 根据 ID 查询操作 在持久层接口中添加 findById 方法: public interface UserDAO { /** * ...