[APIO 2009] Atm
传送门:>Here<
题意:给出一个有向图(有环),每个点有点权。从点S出发,经过每个点Tot可以加上点权,点可以经过多次,然而点权不能重复加多次。先要求走到某个终点E时点权最大。先要求在给定的某些终点E终,点权之和的最大值。
解题思路:
题目有点难懂。首先如果只是暴力搜索的话,由于有环会无限循环,而且环内的值只会加一次,很容易想到强连通分量缩点。然后SPFA(改一改,变成最大值)求出每个点的最大值就可以了。然而如果某一个强连通分量里有酒吧,那么走到这个强联通分量作为终点一定是可以的。因此加个判断就好了。还是很水的……
Code
Nothing
/*By QiXingzhi*/
#include <cstdio>
#include <queue>
#include <cstring>
#define r read()
#define Max(a,b) (((a)>(b)) ? (a) : (b))
#define Min(a,b) (((a)<(b)) ? (a) : (b))
typedef long long ll;
using namespace std;
const int MAXN = ;
const int MAXM = ;
const int INF = 0x3f3f3f3f;
inline int read(){
int x = ; int w = ; register int c = getchar();
while(c ^ '-' && (c < '' || c > '')) c = getchar();
if(c == '-') w = -, c = getchar();
while(c >= '' && c <= '') x = (x << ) +(x << ) + c - '', c = getchar();
return x * w;
}
bool bar[MAXN];
queue <int> q;
vector <int> G[MAXN],G2[MAXN];
int N,M,dfs_clock,S,P,scc_cnt,top,_x,ans;
int p[MAXN],sccno[MAXN],dfn[MAXN],low[MAXN],sta[MAXN],x[MAXN],y[MAXN],d[MAXN],val[MAXN],win[MAXN];
inline void AddEdge(int u, int v){ G[u].push_back(v); }
inline void AddEdge2(int u, int v){ G2[u].push_back(v); }
inline void tarjan(int u){
dfn[u] = low[u] = ++dfs_clock;
sta[++top] = u;
int sz = G[u].size(), v;
for(int i = ; i < sz; ++i){
v = G[u][i];
if(!dfn[v]){ tarjan(v); low[u] = Min(low[u], low[v]); }
else if(!sccno[v]) low[u] = Min(low[u], dfn[v]);
}
int X;
if(dfn[u] == low[u]){
++scc_cnt;
while(){
X = sta[top--];
if(bar[X]) win[scc_cnt] = ;
sccno[X] = scc_cnt;
val[scc_cnt] += p[X];
if(X == u) break;
}
}
}
inline void BFS(int s){
d[s] = val[s];
q.push(s);
int cur,sz,v;
while(!q.empty()){
cur = q.front(), q.pop();
sz = G2[cur].size();
for(int i = ; i < sz; ++i){
v = G2[cur][i];
if(d[cur] + val[v] > d[v]){ d[v] = d[cur] + val[v]; q.push(v); }
}
}
}
int main(){
N = r, M = r;
for(int i = ; i <= M; ++i){ x[i] = r, y[i] = r; AddEdge(x[i], y[i]); }
for(int i = ; i <= N; ++i) p[i] = r;
S = r, P = r;
for(int i = ; i <= P; ++i) _x = r, bar[_x] = ;
for(int i = ; i <= N; ++i) if(!dfn[i]) tarjan(i);
for(int i = ; i <= M; ++i) if(sccno[x[i]] != sccno[y[i]]) AddEdge2(sccno[x[i]], sccno[y[i]]);
BFS(sccno[S]);
for(int i = ; i <= N; ++i) if(win[i]) ans = Max(ans, d[i]);
printf("%d", ans);
return ;
}
[APIO 2009] Atm的更多相关文章
- bzoj 1179 [APIO 2009]Atm(APIO水题) - Tarjan - spfa
Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每行一 ...
- 【BZOJ 1177】【APIO 2009】Oil
http://www.lydsy.com/JudgeOnline/problem.php?id=1177 前缀和优化,时间复杂度$O(nm)$ 因为数据不全,快速读入会导致RE,切记! #includ ...
- 【BZOJ 1178】【APIO 2009】CONVENTION会议中心
http://www.lydsy.com/JudgeOnline/problem.php?id=1178 这道题想了好久没想明白,倍增数组通过看题解很快就明白了,但是一小段区间内应有的最多线段数一直不 ...
- Tyvj1139 向远方奔跑(APIO 2009 抢掠计划)
描述 在唐山一中,吃饭是一件很令人头疼的事情,因为你不可能每次都站在队伍前面买饭,所以,你最需要做的一件事就是——跑饭.而跑饭的道路是无比艰难的,因为路是单向的(你要非说成是双向的我也没法,前 ...
- [知识点]Tarjan算法
// 此博文为迁移而来,写于2015年4月14日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vxnx.html UPD ...
- 技术分享:逆向分析ATM分离器
文章内容仅供技术交流,请勿模仿操作! 背景(作者) 每一次外出时, Elizabeth和我总是格外的小心,同时把我们身上的钱藏在特殊的皮带上面,这样还不够,我们还采取了“狡兔三窟”的方式来藏身上带的银 ...
- 摩根大通银行被黑客攻克, ATM机/网银危在旦夕,winxp退市灾难来临了
winxp4月退市到如今还不到半年,就出现故障了 7600多万个消费者银行账户被黑.此外还有700万个小企业账户的信息也被黑客窃取,这个算不算灾难呢?假设等到银行业彻底崩溃,资金彻底丧失,那不仅仅是灾 ...
- 设计模式(十二):通过ATM取款机来认识“状态模式”(State Pattern)
说到状态模式,如果你看过之前发布的重构系列的文章中的<代码重构(六):代码重构完整案例>这篇博客的话,那么你应该对“状态模式”并不陌生,因为我们之前使用到了状态模式进行重构.上一篇博客我们 ...
- BZOJ 2039: [2009国家集训队]employ人员雇佣
2039: [2009国家集训队]employ人员雇佣 Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 1369 Solved: 667[Submit ...
随机推荐
- 从 0 到 1 实现 React 系列 —— 4.setState优化和ref的实现
看源码一个痛处是会陷进理不顺主干的困局中,本系列文章在实现一个 (x)react 的同时理顺 React 框架的主干内容(JSX/虚拟DOM/组件/生命周期/diff算法/setState/ref/. ...
- Oracle记录表删除操作简单方法
最近项目中Oracle库中一个表log_gpackage有数据丢失现象,但因为没有启用归档,所以CDC和Dataguard都无法使用.google一下,最简单的方法,增加触发器处理逻辑: ---创建触 ...
- Django+nginx+uwsgi部署教程
00-所需工具 xshell:https://www.netsarang.com/zh/downloading/?token=ZlZnVUNsWDJuM0VaZnVPUjZST1dwd0AzYlNte ...
- Python学习第六篇——字典中的键和值
favorite_language ={ "jen":"python", "sarah":"c", "edwa ...
- 团队作业5——测试与发布(alpha阶段)
Deadline: 2018-5-9 10:00PM,以提交至班级博客时间为准. 根据以下要求,完成对本团队项目的测试与发布. 测试 请根据团队项目中软件的需求文档.功能说明.系统设计和测试计划,写出 ...
- JSP 快速入门
目录 生命周期 9大对象 常用指令 基本语法 表达式语言(EL) jstl介绍 常用的jstl标签 生命周期 我们虽然写的是jsp,代码中包含了html.css.js,以及Java代码,但是真正执行的 ...
- 敏捷与CMM的恩怨
模式不同,一种是灵活,一种是严肃.
- vue上传图片
在用这块代码前需要在主页面index引入<script src="http://at.alicdn.com/t/font_kfbh2nlnqrrudi.js">< ...
- 使用PL/SQL连接Oracle时报错ORA-12541: TNS: 无监听程序
因公司需求,安装oracle数据库,oracle数据库用账号密码可以登录,然后在pl/sql里面不能登录,显示无监听程序. 这就说明可能有些服务没有启动,开始运行services.msc ,进入后寻找 ...
- clone内容包含select2
如果克隆的内容包含select2,克隆之后要先删除select之后自动生成的span,再对select2进行初始化,生成新的元素.