描述

Siruseri 城中的道路都是单向的。不同的道路由路口连接。按照法律的规定,在每个路口都设立了一个 Siruseri 银行的 ATM 取款机。 令人奇怪的是, Siruseri 的酒吧也都设在路口,虽然并不是每个路口都设有酒吧。Banditji 计划实施 Siruseri 有史以来最惊天动地的 ATM 抢劫。他将从市中心出发,沿着单向道路行驶,抢劫所有他途径的 ATM 机,最终他将在一个酒吧庆祝他的胜利。使用高超的黑客技术,他获知了每个 ATM 机中可以掠取的现金数额。他希 望你帮助他计算从市中心出发最后到达某个酒吧时最多能抢劫的现金总数。他可以经过同一路口或道路任意多次。但只要他抢劫过某个 ATM 机后, 该 ATM 机里面就不会再有钱了。例如,假设该城中有 6 个路口,道路的连接情况如下图所示:

市中心在路口 1,由一个入口符号→来标识,那些有酒吧的路口用双圈来表示。每个 ATM 机中可取的钱数标在了路口的上方。在这个例子中, Banditji 能抢 劫的现金总数为 47, 实施的抢劫路线是: 1-2-4-1-2-3-5。

输入

第一行包含两个整数 N、 M。 N表示路口的个数, M表示道路条数。接下来M行,每行两个整数,这两个整数都在 1 到 N之间,第 i+1 行的两个整数表示第i 条道路的起点和终点的路口编号。接下来 N行,每行一个整数,按顺序表示每个路口处的 ATM 机中的钱数。接下来一行包含两个整数 S、 P, S 表示市中心的编号,也就是出发的路口。 P 表示酒吧数目。接下来的一行中有 P 个整数,表示P 个有酒吧的路口的编号。

输出

输出一个整数,表示 Banditji 从市中心开始到某个酒吧结束所能抢劫的最多的现金总数。

其实

就是Tarjan缩点后跑spfa

我可能自带大常数吧。。反正不用读优T了

#include<bits/stdc++.h>
using namespace std;#define N 500000
#define M 500000
#define INF 0x3f3f3f3fint dfn[N],low[N],vis[N],first[N],color[N],siz[N];
int w[N],jg[N],atm[N];
int head[N],visit[N],dis[N];
int cnt=0,cot=0,tot=0,num=0,n,m,ss,p,ans=0;
stack <int> s;
queue <int> q;struct email
{int u,v,w;int nxt;
}e[M*2],edge[M*2];inline void read(int &x)
{x=0;int f=1;char c=getchar();while(c<'0'||c>'9'){if(c==-1)f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}x*=f;
}inline void add(int u,int v)
{e[++cnt].nxt=first[u];first[u]=cnt;e[cnt].u=u;e[cnt].v=v;
}inline void readd(int u,int v,int w)
{edge[++cot].nxt=head[u];head[u]=cot;edge[cot].u=u;edge[cot].v=v;edge[cot].w=w;
}void tarjan(int u)
{dfn[u]=low[u]=++tot;vis[u]=1;s.push(u);for(int i=first[u];i;i=e[i].nxt){int v=e[i].v;if(!dfn[v]){tarjan(v);low[u]=min(low[u],low[v]);}elseif(vis[v])low[u]=min(low[u],dfn[v]);    }if(dfn[u]==low[u]){num++;while(1){int t=s.top();s.pop();vis[t]=0; siz[num]++;color[t]=num;atm[num]+=w[t];if(t==u)break;}}
}void spfa(int start)
{for(int i=1;i<=n;i++)dis[i]=INF;dis[start]=-atm[start];q.push(start);visit[start]=1;while(!q.empty()){int u=q.front();q.pop();visit[u]=0;for(int i=head[u];i;i=edge[i].nxt){int v=edge[i].v;int w=edge[i].w;if(dis[v]>dis[u]+w)dis[v]=dis[u]+w;if(!visit[v]){visit[v]=1;q.push(v);}}}
}void readin()
{read(n);read(m);for(int i=1;i<=m;i++){int u,v;read(u);read(v);add(u,v);}for(int i=1;i<=n;i++)read(w[i]);read(ss);read(p);for(int i=1;i<=p;i++)read(jg[i]);
}int main()
{readin();for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);for(int i=1;i<=n;i++)for(int k=first[i];k;k=e[k].nxt){int j=e[k].v;if(color[i]==color[j])continue;readd(color[i],color[j],-atm[color[j]]);    }spfa(color[ss]);for(int i=1;i<=p;i++)ans=max(ans,-dis[color[jg[i]]]);printf("%d",ans);
}

转载于:https://www.cnblogs.com/NSD-email0820/p/9440089.html

【APIO2009-3】抢掠计划相关推荐

  1. 【BZOJ1179】[Apio2009]Atm/抢掠计划

    1179: [Apio2009]Atm Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 4701  Solved: 2087 [Submit][Sta ...

  2. acmore|acmore.cc1211采油区域1212会议中心1213抢掠计划APIO2009

    采油区域: #include <iostream> #include <algorithm> #include <cstdio> #include <cstd ...

  3. bzoj 1179 抢掠计划atm (缩点+有向无环图DP)

    bzoj 1179 抢掠计划atm (缩点+有向无环图DP) 手动博客搬家: 本文发表于20170716 10:58:18, 原地址https://blog.csdn.net/suncongbo/ar ...

  4. [APIO2009]抢掠计划

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

  5. 洛谷 P3627 [APIO2009]抢掠计划 题解

    Analysis 建图+强连通分量+SPFA求最长路 但要保证最后到达的点中包含酒馆 虽然思路并不难想,但要求的代码能力很高. 1 #include<iostream> 2 #includ ...

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

    题目链接:https://www.luogu.org/problemnew/show/P3627 把点权转化到边权上去. #include <stack> #include <que ...

  7. 洛谷 P3627 [APIO2009]抢掠计划

    这题一看就是缩点,但是缩完点怎么办呢?首先我们把所有的包含酒吧的缩点找出来,打上标记,然后建立一张新图, 每个缩点上的点权就是他所包含的所有点的点权和.但是建图的时候要注意,每一对缩点之间可能有多条边 ...

  8. 非递归!APIO2009atm[抢掠计划]题解

    题目描述 输入描述 Input Description 第一行包含两个整数N.M.N 表示路口的个数,M 表示道路条数.接下来 M 行,每行两个整数,这两个整数都在1 到N 之间,第i+1 行的两个整 ...

  9. SCAU-春季训练-不应该啊(怎么这么菜。。。)

    2021/3/14 春季训练2(难度div2d) 反思:(赛前,看什么crt,赛时满脑子都是线性方程组,....................................) 最近表现都不太好.. ...

最新文章

  1. Acdream Xor 简单数学
  2. LeeCode_MultiplyStrings
  3. Java中的锁的概念大汇总
  4. 状态输出导航栏html,Vue实现导航栏效果(选中状态刷新不消失)_百厌_前端开发者...
  5. pc构件生产线及设备_【图片】PC装配式建筑生产线,PC构件装备,PC生产线模台15805376300【pc装配式建筑吧】...
  6. MySQL Server has gone away报错原因汇总
  7. ES5-3 循环、引用值初始、显示及隐式类型转换
  8. html图片通过照片查看器打开图片,在Windows7中打开照片,提示“Windows 照片查看器无法显示此图片,因为计算机上...
  9. HTML期末作业-旅游网页
  10. Leetcode:Longest Substring Without Repeating Characters分析和实现
  11. 启用Mac系统读写NFTS磁盘
  12. centos7永久修改主机名
  13. 获取ADSL上网帐号密码并自动保存到D盘
  14. inductive learning (归纳学习)与 transductive learning(直推学习)
  15. drupal与html转换,HTML转Drupal主题的方法
  16. ROSBridge - ROS系统与非ROS外部系统的通信的C++客户端实现
  17. UNICODE,GBK,UTF-8区别
  18. php访问80端口强制跳转443,nginx 80端口重定向到443端口
  19. 迅雷等待ftp服务器信息,如何去除迅雷的资源信息一栏
  20. 系统业务逻辑书籍_Python框架:Django写图书管理系统(LMS)

热门文章

  1. 笔记11:GDI 制作数字验证码
  2. 【原】文本挖掘——特征选择
  3. Enterprise Vault 10.0.4 FOR Exchange2013 部署之三-日记邮件归档
  4. 将学校版JAVA系统迁移到Mysql数据库的工作安排
  5. WPF Unleashed Chapter 2:XAML Demystified 翻译(第二部分)
  6. python语法基础题你好_Python基础要打牢,先学会基本语法
  7. python怎么批量处理数据_python如何批量处理excel数据?_后端开发
  8. java语法糖效率高吗_打包 Java将持续向“高糖”方向发展,你真的了解Java语法糖吗? _好机友...
  9. 【django】三、常用的模板标签和过滤器
  10. mysql 查询 in memory_In-Memory整体汇总