题目: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++的更多相关文章

  1. BZOJ1179_APIO2009_抢掠计划_C++

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1179 一道用 Tarjan 缩点+SPFA 最长路的题(Tarjan 算法:http://ww ...

  2. P3627 [APIO2009]抢掠计划

    P3627 [APIO2009]抢掠计划 Tarjan缩点+最短(最长)路 显然的缩点...... 在缩点时,顺便维护每个强连通分量的总权值 缩完点按照惯例建个新图 然后跑一遍spfa最长路,枚举每个 ...

  3. 【洛谷P3627】[APIO2009]抢掠计划

    抢掠计划 题目链接 比较水的缩点模板题,Tarjan缩点,重新建图,记录联通块的钱数.是否有酒吧 DAG上记忆化搜索即可 #include<iostream> #include<cs ...

  4. 洛谷 P3627 【抢掠计划】

    题库:洛谷 题号:3627 题目:抢掠计划 link:https://www.luogu.org/problem/P3627 思路 : 这道题是一道Tarjan + 最长路的题.首先,我们用Tarja ...

  5. APIO2009 抢掠计划 Tarjan DAG-DP

    APIO2009 抢掠计划 Tarjan spfa/DAG-DP 题面 一道\(Tarjan\)缩点水题.因为可以反复经过节点,所以把一个联通快中的所有路口看做一个整体,缩点后直接跑\(spfa\)或 ...

  6. 题解 P3627 【[APIO2009]抢掠计划】

    咕了四个小时整整一晚上 P3627 [APIO2009] 抢掠计划(https://www.luogu.org/problemnew/show/P3627) 不难看出答案即为该有向图的最长链长度(允许 ...

  7. [APIO2009]抢掠计划(Tarjan,SPFA)

    [APIO2009]抢掠计划 题目描述 Siruseri 城中的道路都是单向的.不同的道路由路口连接.按照法律的规定, 在每个路口都设立了一个 Siruseri 银行的 ATM 取款机.令人奇怪的是, ...

  8. [APIO2009]抢掠计划

    题面: Description Siruseri城中的道路都是单向的.不同的道路由路口连接.按照法律的规定,在每个路口都设立了一个Siruseri银行的ATM取款机.令人奇怪的是,Siruseri的酒 ...

  9. 洛谷P3627[APOI2009] (讨厌的)抢掠计划

    题目描述 Siruseri 城中的道路都是单向的.不同的道路由路口连接.按照法律的规定, 在每个路口都设立了一个 Siruseri 银行的 ATM 取款机.令人奇怪的是,Siruseri 的酒吧也都设 ...

随机推荐

  1. jpeglib的使用

    1. 解压jpeglib tar xvzf libjpeg-turbo-1.2.1.tar.gz 2. 阅读里面的说明文件,得到jpeg解压缩的一般步骤: /*Allocate and initial ...

  2. C语言进阶——goto 和 void 的分析08

    遭人遗弃的goto: 高手潜规则:禁止使用goto 项目经验:程序质量与goto的出现次数成反比 最后的判决:将goto打入冷宫 程序示例1:(goto副作用分析) #include <stdi ...

  3. Linux两种方式rd.break和init重置root管理员密码

    centos7/rhel7进入单用户方式和重置密码方式发生了较大变化,GRUB由b引导变成了ctrl+x引导. 重置密码主要有rd.break和init两种方法. rd.break方法: 1.启动的时 ...

  4. 5 Django-1的路由层(URLconf)

    URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于客户端发来的某个URL调用哪一段逻辑代码 ...

  5. 关于DIV内文字垂直居中的写法

    最近在写UI,或多或少用到了CSS,在这记录一下,今天用到的DIV内文字垂直居中的写法, 因为所做的项目都是基于WebKit内核浏览器演示的,所以我们今天采用的是-webkit-box的写法: dis ...

  6. Grub Rescue修复方法[repost]

    From : http://www.2cto.com/os/201111/112327.html 症状:开机显示:GRUB loading error:unknow filesystem grub r ...

  7. 让NVelocity做更多的事,VS Extension+NVelocity系列

    我不知道园子里到底有多少人喜欢使用NVelocity这个模板引擎,其实说实话,如果现在让我选,我对Razor的喜好要比NVelocity或者T4等等的模板引擎更多一些,当然了,个人看法而已.只是我在公 ...

  8. b树的实现

    花了蛮长时间实现的b树插入操作.有时间再实现其他操作. #include <stdio.h> #include <stdlib.h> #define M 5 enum KeyS ...

  9. 剑指Offer - 九度1385 - 重建二叉树

    剑指Offer - 九度1385 - 重建二叉树2013-11-23 23:53 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的 ...

  10. 《Cracking the Coding Interview》——第8章:面向对象设计——题目5

    2014-04-23 18:42 题目:设计一个在线阅读系统的数据结构. 解法:这题目太大了,我的个亲娘.显然你不可能一次加载一整本书,做到单页纸加载的粒度是很必要的.为了读书的连贯效果,预取个几页也 ...