bzoj 1179 [Apio2009]Atm 缩点+最短路
[Apio2009]Atm
Time Limit: 15 Sec Memory Limit: 162 MB
Submit: 4290 Solved: 1893
[Submit][Status][Discuss]
Description
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
HINT
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue> #define N 500007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n,m,S,p;
int dis[N],w[N],val[N];
int cnt,hed[N],rea[N<<],nxt[N<<];
int cnt1,hed1[N],rea1[N<<],nxt1[N<<];
int tim,tot,scc,bel[N],stk[N],dfn[N],low[N];
bool flag[N],instk[N],flag1[N]; void add(int u,int v)
{
nxt[++cnt]=hed[u];
hed[u]=cnt;
rea[cnt]=v;
}
void add1(int u,int v)
{
nxt1[++cnt1]=hed1[u];
hed1[u]=cnt1;
rea1[cnt1]=v;
}
void Tarjan(int u)
{
dfn[u]=low[u]=++tim;
stk[++tot]=u,instk[u]=true;
for (int i=hed[u];i!=-;i=nxt[i])
{
int v=rea[i];
if (!dfn[v])
{
Tarjan(v);
low[u]=min(low[u],low[v]);
}
else if (instk[v]) low[u]=min(low[u],dfn[v]);
}
if (low[u]==dfn[u])
{
int x=-;scc++;
while (x!=u)
{
x=stk[tot--];
bel[x]=scc;
instk[x]=false;
}
}
}
void Spfa(int st)
{
queue<int>q;q.push(bel[st]);bool boo[N];
memset(boo,,sizeof(boo));boo[bel[st]]=true;
for (int i=;i<=scc;i++) dis[i]=;
dis[bel[st]]=val[bel[st]];
while (!q.empty())
{
int u=q.front();q.pop();
for (int i=hed1[u];i!=-;i=nxt1[i])
{
int v=rea1[i];
if (dis[u]+val[v]>dis[v])
{
dis[v]=dis[u]+val[v];
if (!boo[v]) q.push(v),boo[v]=true;
}
}
boo[u]=false;
}
}
int main()
{
freopen("fzy.in","r",stdin);
freopen("fzy.out","w",stdout); memset(hed,-,sizeof(hed));
memset(hed1,-,sizeof(hed1));
n=read(),m=read();
for (int i=;i<=m;i++)
{
int x=read(),y=read();
add(x,y);
}
for (int i=;i<=n;i++) w[i]=read();
S=read(),p=read();
for (int i=;i<=p;i++)
flag[read()]=true;
for (int i=;i<=n;i++)
if (!dfn[i]) Tarjan(i);
for (int u=;u<=n;u++)
{
for (int i=hed[u];i!=-;i=nxt[i])
{
int v=rea[i];
if (bel[u]!=bel[v]) add1(bel[u],bel[v]);
}
flag1[bel[u]]|=flag[u];
val[bel[u]]+=w[u];
}
Spfa(S);
int ans=;
for (int i=;i<=scc;i++)
ans=max(ans,dis[i]*flag1[i]);
printf("%d\n",ans);
}
bzoj 1179 [Apio2009]Atm 缩点+最短路的更多相关文章
- BZOJ 1179: [Apio2009]Atm( tarjan + 最短路 )
对于一个强连通分量, 一定是整个走或者不走, 所以tarjan缩点然后跑dijkstra. ------------------------------------------------------ ...
- bzoj 1179 [Apio2009]Atm——SCC缩点+spfa
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1179 显然SCC缩点. 然后准备倒着拓扑序推到st,结果WA. 听TJ说dj求最长路会发生不 ...
- bzoj 1179: [Apio2009]Atm
Description Input 第 一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路 的起点和终点的 ...
- bzoj 1179[Apio2009]Atm (tarjan+spfa)
题目 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每行一 ...
- BZOJ 1179 [Apio2009]Atm(强连通分量)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1179 [题目大意] 给出一张有向带环点权图,给出一些终点,在路径中同一个点的点权只能累 ...
- bzoj 1179: [Apio2009]Atm【tarjan+spfa】
明明优化了spfa还是好慢-- 因为只能取一次值,所以先tarjan缩点,把一个scc的点权和加起来作为新点的点权,然后建立新图.在新图上跑spfa最长路,最后把酒吧点的dis取个max就是答案. # ...
- 缩点+spfa最长路【bzoj】 1179: [Apio2009]Atm
[bzoj] 1179: [Apio2009]Atm Description Siruseri 城中的道路都是单向的.不同的道路由路口连接.按照法律的规定, 在每个路口都设立了一个 Siruseri ...
- 1179: [Apio2009]Atm
1179: [Apio2009]Atm Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1629 Solved: 615[Submit][Status ...
- BZOJ1179 : [Apio2009]Atm 缩点+spfa
1179: [Apio2009]Atm Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 2069 Solved: 826[Submit][Status ...
随机推荐
- post接口_form表单上传
上传文件的本质是浏览器读取本地文件的内容,以二进制数据方式传输到服务端,服务端新建一个文件,将获取到的数据复制到文件中 LR中上传操作可以通过web_submit_data函数实现,支持录制要点:we ...
- ntp服务:实现时间同步
一. 引言 目前的项目为分布式系统,采用dubbo+zookeepe,排查BUG,发现各个服务器的时间不一致,遂网上查找资源,使得时间保持一致. 二. 步骤 1)以第一台服务器为“服务端”,其他台服务 ...
- markdown语法介绍
1. 标题类 每级标题用"# title"表示,共支持6级标题: 2. 段落类 1.建议用换行符控制: 2.用"<p></p>"控制: ...
- mysql 主从配置笔记
1.master配置 server-id=1 log-bin=mysql-bin binlog-do-db=testdata binlog-ignore-db=mysql 2.master增加用户 g ...
- 最短路径算法(II)
什么??你问我为什么不在一篇文章写完所有方法?? Hmm…其实我是想的,但是博皮的加载速度再带上文章超长图片超多的话… 可能这辈子都打不开了吧… 上接https://www.cnblogs.com/U ...
- 剑指offer-二叉树中和为某一值的路径24
题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大 ...
- Thunder团队第六周 - Scrum会7
Scrum会议7 小组名称:Thunder 项目名称:i阅app Scrum Master:杨梓瑞 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传 ...
- tomcat端口号修改
修改Tomcat的端口号: 在默认情况下,tomcat的端口是8080,如果出现8080端口号冲突,用如下方法可以修改Tomcat的端口号: 首先: 在Tomcat的根(安装)目录下,有一个conf文 ...
- poj 3009 (深搜求最短路)
题目大意就是求在特定规则下的最短路,这个规则包含了消除障碍的操作.用BFS感觉选择消除障碍的时候不同路径会有影响,用DFS比较方便状态的还原(虽然效率比较低),因此这道题目采用DFS来写. 写的第一次 ...
- 使用cout进行格式化
以下内容摘自木缥缈的博客 使用cout进行格式化 ostream插入运算符将值转换为文本格式.在默认情况下,格式化值的方式如下. * 对于char值,如果它代表的是可打印字符,则将被作为一个字符显示在 ...