CodeVS1611_APIO2009_抢掠计划_C++
题目:http://codevs.cn/problem/1611/
关于题解请戳这里:http://www.cnblogs.com/hadilo/p/5892765.html
下面给一个可以A的代码,由于没有无限栈只能用手写栈Tarjan,上面题解里给的代码是递归栈的Tarjan,会RE
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
#include <stack>
#define nil 0
#define N 500005
using namespace std; int n, m, csh[N], S, P, f[N];
int u[N << ], v[N << ], nxt[N << ], pnt[N], e;
int dfn[N], low[N], isin[N], hcash[N], tot, indx;
bool instack[N], vis[N];
int Sta[N], stop;
vector <int> g[N];
stack <int> s;
void add(int a, int b)
{
u[++e] = a; v[e] = b;
nxt[e] = pnt[a]; pnt[a] = e;
}
void tarjan(int x)
{
s.push(x);
dfn[x] = low[x] = ++indx;
Sta[++stop] = x;
instack[x] = true;
while(!s.empty())
{
int t = s.top();
for(int i = pnt[t]; i != nil; i = nxt[i])
{
if(dfn[v[i]] == )
{
dfn[v[i]] = low[v[i]] = ++indx;
Sta[++stop] = v[i]; instack[v[i]] = true;
s.push(v[i]);
break;
}
}
if(t == s.top())
{
for(int i = pnt[t]; i != nil; i = nxt[i])
{
if(dfn[v[i]] > dfn[t]) low[t] = min(low[t], low[v[i]]);
else if(instack[v[i]]) low[t] = min(low[t], dfn[v[i]]);
}
if(dfn[t] == low[t])
{
++tot;
int j;
do
{
j = Sta[stop--];
instack[j] = false;
isin[j] = tot;
hcash[tot] += csh[j];
} while(j != t);
}
s.pop();
}
}
}
void init()
{
int a, b;
scanf("%d%d", &n, &m);
for(int i = ; i <= m; ++i)
{
scanf("%d%d", &a, &b);
add(a, b);
}
for(int i = ; i <= n; ++i)
{
scanf("%d", &csh[i]);
}
scanf("%d%d", &S, &P);
for(int i = ; i <= n; ++i)
{
if(dfn[i] == )
{
tarjan(i);
}
}
for(int i = ; i <= n; ++i)
{
for(int j = pnt[i]; j != nil; j = nxt[j])
{
if(isin[i] != isin[v[j]])
{
g[isin[i]].push_back(isin[v[j]]);
}
}
}
}
void work()
{
queue <int> Q;
memset(vis, , sizeof(vis));
memset(f, , sizeof(f));
f[isin[S]] = hcash[isin[S]];
Q.push(isin[S]);
vis[isin[S]] = true;
while(!Q.empty())
{
int t = Q.front();
Q.pop();
vis[t] = false;
for(int i = ; i < g[t].size(); ++i)
{
if(f[g[t][i]] < f[t] + hcash[g[t][i]])
{
f[g[t][i]] = f[t] + hcash[g[t][i]];
if(!vis[g[t][i]])
{
vis[g[t][i]] = true;
Q.push(g[t][i]);
}
}
}
}
int ans = , a;
for(int i = ; i <= P; ++i)
{
scanf("%d", &a);
ans = max(ans, f[isin[a]]);
}
printf("%d\n", ans);
}
int main()
{
init();
work();
return ;
}
版权所有,转载请联系作者,违者必究
QQ:740929894
CodeVS1611_APIO2009_抢掠计划_C++的更多相关文章
- BZOJ1179_APIO2009_抢掠计划_C++
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1179 一道用 Tarjan 缩点+SPFA 最长路的题(Tarjan 算法:http://ww ...
- 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的酒 ...
- 洛谷P3627[APOI2009] (讨厌的)抢掠计划
题目描述 Siruseri 城中的道路都是单向的.不同的道路由路口连接.按照法律的规定, 在每个路口都设立了一个 Siruseri 银行的 ATM 取款机.令人奇怪的是,Siruseri 的酒吧也都设 ...
随机推荐
- 交叉编译qt5.6
按照网上的攻略编译QT5.6 https://www.lijingquan.net/2016/07/08/build-kernel-busybox-qt5-6-tslib-imx28/ 出现问题,找不 ...
- POJ 3662 (二分+SPFA
Telephone Lines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8856 Accepted: 3211 D ...
- POJ 2836 状压DP
Rectangular Covering Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2727 Accepted: 7 ...
- python开发基础之字符编码、文件处理和函数基础
字符编码 为什么要有字符编码? 字符编码是为了让计算机能识别我们人写的字符,因为计算机只认识高低电平,也就是二进制数"0","1". 一个文件用什么编码方式存储 ...
- 20145202马超 《Java程序设计》第三周学习总结
************************http://git.oschina.net/tuolemi/java这是git的那个网址********************* 函数的重载:在同一 ...
- 16 Django-admin管理工具
admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTAL ...
- 1,MongoDB简介和安装
一.初识MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数 ...
- Android 导出traces.txt 遇到的坑
我一直以为traces.txt 导出需要root .因为每当我 cd data ll 然后就会告诉我 Permission denied 后来我问同事,怎么导出traces.txt 文件.同事说很简单 ...
- Trident学习笔记(一)
1. Trident入门 Trident ------------------- 三叉戟 storm高级抽象,支持有状态流处理: 好处是确保消费被处理一次: 以小批次方式处理输入流,得到精准一次性处理 ...
- Python 字符串格式化输出方式
字符串格式化有两种方式:百分号方式.format方式. 其中,百分号方式比较老,而format方式是比较先进的,企图替代古老的方式,目前两者共存. 1.百分号方式 格式:%[(name)][flags ...