Tyvj1139 向远方奔跑(APIO 2009 抢掠计划)
描述
输入格式
输出格式
测试样例1
输入
6 7
1 2
2 3
3 5
2 4
4 1
2 6
6 5
10
12
8
16
1
5
1 4
4 3 5 6
输出
47
备注
思路:
1、分析路可以重复走,想到强连通分量,如果强连通分量里面有一个点被访问,那么整个强连通分量都要被访问,否则答案偏小,于是先tarjan再缩点
2、缩点之后,整个图由一个有向有环图变为一个有向无环图,于是spfa处理,然后就AC了(bzoj上的好像能卡掉,WYW用tarjan写信息传递好像被卡了)
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<vector>
#include<algorithm>
#include<queue>
#include<stack>
#define maxn 3005
#define maxint ~0U>>1
using namespace std;
stack<int> sta;
vector<int> comp[maxn];
int incomp[maxn],instack[maxn],dfn[maxn],low[maxn];
int index,cnum;
int n,m,q,d[maxn],rice[maxn],noodle[maxn],v[maxn],s,p,ans;
vector<int> g[maxn],nowg[maxn];
int nowrice[maxn],nownoodle[maxn],nows;
void input(){
cin>>n>>m;
int u,v;
for(int i = ;i <= m;i++){
scanf("%d%d",&u,&v);
g[u].push_back(v); }
for(int i = ;i <= n;i++){
scanf("%d",&rice[i]);
}
cin>>s>>p;
int nnow;
for(int i = ;i <= p;i++){
scanf("%d",&nnow);
noodle[nnow] = ;
}
}
void tarjan(int u){
instack[u] = ;
dfn[u] = low[u] = ++index;
sta.push(u);
for(int i = ;i < g[u].size();i++){
int j = g[u][i];
if(!dfn[j]){
tarjan(j);
low[u] = min(low[u],low[j]);
}else if(instack[j] == ){
low[u] = min(low[u],dfn[j]);
}
}
if(dfn[u] == low[u]){
++cnum;
while(!sta.empty()){
int t = sta.top();
sta.pop();
instack[t] = ;
incomp[t] = cnum;
comp[cnum].push_back(t);
if(t == u){
break;
}
}
}
}
void work(){
for(int i = ;i <= n;i++){
if(!dfn[i]) tarjan(i);
}
int u,v,newu,newv;
for(int i = ;i <= n;i++){
u = i;
newu = incomp[u];
nowrice[newu] += rice[u];
if(noodle[u]) nownoodle[newu] = ;
if(u == s) nows = newu;
for(int j = ;j < g[u].size();j++){
v = g[u][j];
newv = incomp[v];
if(newu == newv) continue;
nowg[newu].push_back(newv);
}
}
}
void spfa(){
queue<int> q;
d[nows] = nowrice[nows];
v[nows] = ;
q.push(nows);
int xx,dd,to,wei;
while(!q.empty()){
xx = q.front();
dd = d[xx];
q.pop();
v[xx] = ;
if(nownoodle[xx]) ans = max(ans,dd);
for(int i = ;i < nowg[xx].size();i++){
to = nowg[xx][i];
wei = nowrice[to];
if(dd + wei > d[to]){
d[to] = dd + wei;
if(!v[to]){
v[to] = ;
q.push(to);
}
}
}
}
cout<<ans;
}
int main(){
input();
work();
spfa();
return ;
}
Tyvj1139 向远方奔跑(APIO 2009 抢掠计划)的更多相关文章
- P3627 [APIO2009]抢掠计划
P3627 [APIO2009]抢掠计划 Tarjan缩点+最短(最长)路 显然的缩点...... 在缩点时,顺便维护每个强连通分量的总权值 缩完点按照惯例建个新图 然后跑一遍spfa最长路,枚举每个 ...
- 【洛谷P3627】[APIO2009]抢掠计划
抢掠计划 题目链接 比较水的缩点模板题,Tarjan缩点,重新建图,记录联通块的钱数.是否有酒吧 DAG上记忆化搜索即可 #include<iostream> #include<cs ...
- 洛谷 P3627 【抢掠计划】
题库:洛谷 题号:3627 题目:抢掠计划 link:https://www.luogu.org/problem/P3627 思路 : 这道题是一道Tarjan + 最长路的题.首先,我们用Tarja ...
- APIO2009 抢掠计划 Tarjan DAG-DP
APIO2009 抢掠计划 Tarjan spfa/DAG-DP 题面 一道\(Tarjan\)缩点水题.因为可以反复经过节点,所以把一个联通快中的所有路口看做一个整体,缩点后直接跑\(spfa\)或 ...
- 题解 P3627 【[APIO2009]抢掠计划】
咕了四个小时整整一晚上 P3627 [APIO2009] 抢掠计划(https://www.luogu.org/problemnew/show/P3627) 不难看出答案即为该有向图的最长链长度(允许 ...
- [APIO2009]抢掠计划(Tarjan,SPFA)
[APIO2009]抢掠计划 题目描述 Siruseri 城中的道路都是单向的.不同的道路由路口连接.按照法律的规定, 在每个路口都设立了一个 Siruseri 银行的 ATM 取款机.令人奇怪的是, ...
- [APIO2009]抢掠计划
题面: Description Siruseri城中的道路都是单向的.不同的道路由路口连接.按照法律的规定,在每个路口都设立了一个Siruseri银行的ATM取款机.令人奇怪的是,Siruseri的酒 ...
- 【BZOJ 1177】【APIO 2009】Oil
http://www.lydsy.com/JudgeOnline/problem.php?id=1177 前缀和优化,时间复杂度$O(nm)$ 因为数据不全,快速读入会导致RE,切记! #includ ...
- 洛谷P3627[APOI2009] (讨厌的)抢掠计划
题目描述 Siruseri 城中的道路都是单向的.不同的道路由路口连接.按照法律的规定, 在每个路口都设立了一个 Siruseri 银行的 ATM 取款机.令人奇怪的是,Siruseri 的酒吧也都设 ...
随机推荐
- 阿里云短信验证_基于阿里云OpenAPI实现
阿里云短信服务 背景简介: 短信验证以及短信通知,目前已经应用的非常广泛,最近因项目需要,需要将原来的短信接口换成阿里云的的短信服务,原项目集成的短信服务能够实现短信的发送以及短信的验证整个过程,简单 ...
- gitlab&Jenkins 详细介绍及其应用
第1章 gitlab 1.1 系统环境 [root@jenkins ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) ...
- spring Cache /Redis 缓存 + Spring 的集成示例
spring Cache https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ spring+redis 缓存 ht ...
- 题解报告:hdu 1061 Rightmost Digit(快速幂取模)
Problem Description Given a positive integer N, you should output the most right digit of N^N. Input ...
- navicat mysql报错误:2013 Lost connection to MySQL server during query
好像是MySQL的navicat UI界面跟数据的连接问题,如果直接用命令导入数据的话,或许能规避这个问题.
- Docker学习系列(二):Docker三十分钟快速入门(上)
一.背景 最近,Docker技术真是一片火热,它的出现也弥补了虚拟机资源消耗过高的问题,直接让虚拟化技术有了质的飞跃.那么本文我们来聊一聊Docker,和大家一起认识Docker,简单入门Dock ...
- Windows Azure中文博客 Windows Azure入门教学系列 (一): 创建第一个WebRole程序
http://blogs.msdn.com/b/azchina/ 本文转自:http://blogs.msdn.com/b/azchina/archive/2010/02/09/windows-azu ...
- [转]ASP.NET MVC Domain Routing
本文转自:http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx ASP.NET MVC Domai ...
- CF804B Minimum number of steps
思路: 找规律.参考了http://blog.csdn.net/harlow_cheng/article/details/71190999. 实现: #include <iostream> ...
- protobuf的lua版
推荐个protobuf的lua版 以前项目客户端lua,通信协议是protobuf,用网易的proto-gen-lua,使用过程遇到些问题需要绕,比如: 1.每次更改.增加proto都要生成新 ...