p3627&bzoj1179 抢掠计划(ATM)
题目

Input
Output
输出一个整数,表示Banditji从市中心开始到某个酒吧结束所能抢劫的最多的现金总数。
Sample Input
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
Sample Output
分析
Tarjan缩点的好题,先用Tarjan缩点,求出每个环的总钱数和这个环中是否有酒吧,然后重新建图跑spfa求最大点权和,但由于要在酒吧结束,所以最终答案只能在有酒吧的环中取。
插曲
作为一个最短路只会写folyd和dijstar的蒟蒻,我自己yy了一个spfa,然而它居然对了(QAQ)
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
int bar[510000],mey[510000],belong[510000],cnt,tmy[510000],tbr[510000];
int dfn[510000],low[510000],vis[510000],sum;
int d[510000],ist[510000],maxn,iqu[510000];
vector<int>v[500010];
vector<int>nv[500010];
stack<int>a;
queue<pair<int,int> >q;
int n,m,s,p;
inline void read(int &x){
int f=1;x=0;
char s=getchar();
while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
while(s>='0'&&s<='9'){x=x*10+(s-'0');s=getchar();}
x*=f;
}
inline void tarjan(int x){
low[x]=dfn[x]=++cnt;
a.push(x);
ist[x]=1;
int i,j,k;
for(i=0;i<v[x].size();i++)
if(!dfn[v[x][i]]){
tarjan(v[x][i]);
low[x]=min(low[x],low[v[x][i]]);
}else if(ist[v[x][i]]){
low[x]=min(low[x],dfn[v[x][i]]);
}
if(dfn[x]==low[x]){
sum++;
int ok=0;
while(1){
int u=a.top();
ist[u]=0;
if(bar[u])ok=1;
belong[u]=sum;
tmy[sum]+=mey[u];
a.pop();
if(u==x)break;
}
if(ok)tbr[sum]=1;
}
return;
}
int main()
{ int i,j,k,x,y;
read(n),read(m);
for(i=1;i<=m;i++){
read(x),read(y);
v[x].push_back(y);
}
for(i=1;i<=n;i++){
read(mey[i]);
}
scanf("%d%d",&s,&p);
for(i=1;i<=p;i++){
read(x);
bar[x]=1;
}
for(i=1;i<=n;i++)
if(!dfn[i])
tarjan(i);
for(i=1;i<=n;i++)
for(j=0;j<v[i].size();j++)
if(belong[i]!=belong[v[i][j]]){
nv[belong[i]].push_back(belong[v[i][j]]);
}
d[belong[s]]=tmy[belong[s]];
q.push(make_pair(belong[s],tmy[belong[s]]));
iqu[belong[s]]=1;
while(!q.empty()){
int u=q.front().first;
q.pop();
iqu[u]=0;
if(tbr[u])maxn=max(maxn,d[u]);
for(i=0;i<nv[u].size();i++){
d[nv[u][i]]=max(d[nv[u][i]],d[u]+tmy[nv[u][i]]);
if(!iqu[nv[u][i]]){
q.push(make_pair(nv[u][i],d[nv[u][i]]));
iqu[nv[u][i]]=1;
}
}
}
cout<<maxn<<endl;
return 0;
}
p3627&bzoj1179 抢掠计划(ATM)的更多相关文章
- P3627 [APIO2009]抢掠计划
P3627 [APIO2009]抢掠计划 Tarjan缩点+最短(最长)路 显然的缩点...... 在缩点时,顺便维护每个强连通分量的总权值 缩完点按照惯例建个新图 然后跑一遍spfa最长路,枚举每个 ...
- 洛谷 P3627 【抢掠计划】
题库:洛谷 题号:3627 题目:抢掠计划 link:https://www.luogu.org/problem/P3627 思路 : 这道题是一道Tarjan + 最长路的题.首先,我们用Tarja ...
- 洛谷 P3627 [APIO2009]抢掠计划 Tarjan缩点+Spfa求最长路
题目地址:https://www.luogu.com.cn/problem/P3627 第一次寒假训练的结测题,思路本身不难,但对于我这个码力蒟蒻来说实现难度不小-考试时肛了将近两个半小时才刚肛出来. ...
- 【luogu P3627 [APIO2009]抢掠计划】 题解
题目链接:https://www.luogu.org/problemnew/show/P3627 把点权转化到边权上去. #include <stack> #include <que ...
- 【题解】洛谷P3627 [APIO2009]抢掠计划(缩点+SPFA)
洛谷P3627:https://www.luogu.org/problemnew/show/P3627 思路 由于有强连通分量 所以我们可以想到先把整个图缩点 缩点完之后再建一次图 把点权改为边权 并 ...
- 洛谷 P3627 [APIO2009]抢掠计划
这题一看就是缩点,但是缩完点怎么办呢?首先我们把所有的包含酒吧的缩点找出来,打上标记,然后建立一张新图, 每个缩点上的点权就是他所包含的所有点的点权和.但是建图的时候要注意,每一对缩点之间可能有多条边 ...
- [洛谷P3627][APIO2009]抢掠计划
题目大意:给你一张$n(n\leqslant5\times10^5)$个点$m(m\leqslant5\times10^5)$条边的有向图,有点权,给你起点和一些可能的终点.问从起点开始,到任意一个终 ...
- BZOJ 1179 抢掠计划atm (缩点+有向无环图DP)
手动博客搬家: 本文发表于20170716 10:58:18, 原地址https://blog.csdn.net/suncongbo/article/details/81061601 https:// ...
- 洛谷 P3627 [APIO2009]抢掠计划 题解
Analysis 建图+强连通分量+SPFA求最长路 但要保证最后到达的点中包含酒馆 虽然思路并不难想,但要求的代码能力很高. #include<iostream> #include< ...
随机推荐
- js 数组的所有操作
js的数组操作有很多,这里记录了常用的和不常用的数组操作方法. 一.数组的创建 数组的创建有两种方法,一种是通过字面量,另一种是通过Array构造函数. 1.字面量 var num1 = [1,2,3 ...
- 适用grunt的注意点
0.使用grunt可以为前端开发省去很多工作量,与git版本控制器配合起来不要太完美,一般也都是这么用的: 1.先安装node.js,下载软件安装就行了,一般自带npm管理器; 2.通过npm安装gr ...
- springmvc的优化
二.springmvc的工作机制 在容器初始化时会建立所有url和controller的对应关系,保存到Map<url,controller>中.tomcat启动时会通知spring初始化 ...
- HDU 4417 Super Mario(2012杭州网络赛 H 离线线段树)
突然想到的节约时间的方法,感觉6翻了 给你n个数字,接着m个询问.每次问你一段区间内不大于某个数字(不一定是给你的数字)的个数 直接线段树没法做,因为每次给你的数字不一样,父节点无法统计.但是离线一 ...
- IIS部署网站(建站)
双击IIS图标,运行IIS服务器: 如下图所示: 2 IIS打开后,选中网站,然后右键,在弹出的菜单中,选择新建,然后选择网站:如下图所hi: 3 在弹出的窗口中,直接点击下一步:如下图所示: 4 ...
- Java企业微信开发_01_接收消息服务器配置
一.准备阶段 需要准备事项: 1.一个能在公网上访问的项目: 见:Java微信公众平台开发_01_本地服务器映射外网 2.一个企业微信账号: 去注册:(https://work.weixin.qq.c ...
- 截取URL参数的方法
1,有点小瑕疵,双问号会截取不到第一个参数 function GetQueryString(name){ var reg = new RegExp("(^|&)"+ nam ...
- 【leetcode刷题笔记】Reverse Linked List II
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...
- c#迭代遍历带数组的json格式数据
[1]首先我们先创建一个带数组形式的json格式的数组 1)我们按照结构定义一个类,如下: using System;using System.Collections.Generic;using Sy ...
- bzoj 3926: 诸神眷顾的幻想乡 广义后缀自动机
题目: Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给 ...