BZOJ1179 Atm //缩点+spfa

1179: [Apio2009]Atm

Description

Input

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

Output

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

Sample Input

6 7
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

47

HINT

50%的输入保证N, M<=3000。所有的输入保证N, M<=500000。每个ATM机中可取的钱数为一个非负整数且不超过4000。输入数据保证你可以从市中心沿着Siruseri的单向的道路到达其中的至少一个酒吧。

分析:

这道题其实很迷。首先这道题发现如果在一个强连通分量里面,都可以走到,而且也没有限制走的次数,所以我们可以将在强连通分量里面的点,缩成一个全新的点。之后造出来一个全新的图。boom!新造出来的图可以走一遍最短路spfa。就好了。

至于怎么缩点。
用并查集先找到父亲与儿子。之后每次判断出一个强量通分量就用将他们的父亲全连成第一个数。
之后在新建图(如果一个点的父亲与儿子的父亲不相同,那他们1,连上2,建边)
这个边其实可以重复利用。这样可以节省空间。

#include<cstdio>
#include<string.h>
#include<algorithm>
using namespace std;
struct node{int infont,v,next,val;
}edge[1000010];
int strack[1000010],cnt,father[1000000],heads[500010],d[500010],s,p;
int DFN[1000000],LOW[1000000],bar[1000000],visit[1000010],du[500010];
int n,m,index_1,head;
void address(int x,int y){edge[++cnt].infont=x;edge[cnt].v=y;edge[cnt].next=heads[x];heads[x]=cnt;return ;
}
void tarjan(int x){LOW[x]=DFN[x]=++index_1;visit[x]=1;strack[++head]=x;for(int i=heads[x];i!=-1;i=edge[i].next){if(!DFN[edge[i].v]){tarjan(edge[i].v);LOW[x]=min(LOW[x],LOW[edge[i].v]);}else if(visit[edge[i].v]){LOW[x]=min(LOW[x],DFN[edge[i].v]);}}if(LOW[x]==DFN[x]){while(strack[head]!=x){visit[strack[head]]=0;d[x]+=d[strack[head]];father[strack[head]]=x;head--;}head--;visit[x]=0;}return ;
}
void build(){memset(heads,-1,sizeof(heads));cnt=0;for(int i=1;i<=m;++i){if(father[edge[i].infont]!=father[edge[i].v])address(father[edge[i].infont],father[edge[i].v]);}return ;
}
void SPFA(int x)
{memset(visit,0,sizeof(visit));memset(strack,0,sizeof(strack));memset(du,-0x3f,sizeof(du));int last;last=head=1;strack[head]=x;visit[x]=1;du[x]=d[x];while(head<=last){int news=strack[head];for(int i=heads[news];i!=-1;i=edge[i].next){if(du[edge[i].v]<du[news]+d[edge[i].v]){du[edge[i].v]=du[news]+d[edge[i].v];if(visit[edge[i].v])continue;visit[edge[i].v]=1;strack[++last]=edge[i].v;}}head++;visit[news]=0;}return ;
}
int main( ){memset(heads,-1,sizeof(heads));scanf("%d%d",&n,&m);int a,b;for(int i=1;i<=m;++i){scanf("%d%d",&a,&b);address(a,b);}for(int i=1;i<=n;++i){scanf("%d",&a);d[i]=a;father[i]=i;}for(int i=1;i<=n;++i)if(!DFN[i])tarjan(i);build();scanf("%d%d",&a,&b);SPFA(father[a]);int ans=0;for(int i=1;i<=b;++i){scanf("%d",&a);ans=max(ans,du[father[a]]);}printf("%d",ans);return 0;
}

转载于:https://www.cnblogs.com/uncle-lu/p/5970686.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Spring Boot和Spring Cloud实现微服务架构学习

目录 Spring 顶级框架 Spring cloud子项目 WHAT - 什么是微服务 微服务简介 微服务的具体特征 SOA vs Microservice HOW - 怎么具体实践微服务 客户端如何访问这些服务&#xff1f; 服务之间如何通信&#xff1f; 这么多服务&#xff0c;怎么找? 这么多服务&#x…

ArcGIS实验教程——实验三十七:基于ArcGIS的太阳辐射分析案例教程

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 一、太阳辐射的基本概念1. 视域2. 太阳图3. 星空图二、太阳辐射ArcGIS案例实现1. 对该区域进行太阳辐射区域分析2. 对单个点的太阳辐射进行分析太阳辐射是地球上各种物理过程和生物过程的…

ArcGIS实验教程——实验三十八:基于ArcGIS的等高线、山体阴影、山顶点提取案例教程

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 1. 加载DEM2. 提取等高距为15m的等高线3. 提取等高距为75m的等高线4. 生成山体阴影5. 生成三维等高线6. 提取山顶点7. 实验数据下载地址山顶点指那些在特定邻域分析范围内,该点都比周围…

(2.3)其他补充—— 二、solidity 基础进阶《实战NFT web3 solidity(新版本0.8.+)》

《web3 solidity0.8.版本&#xff08;持续更新新版本内容&#xff09; 基础到实战NFT开发》会及时更新新版本 solidity 内容&#xff0c;以及完成最终的 NFT 实战商业项目部分。 注&#xff1a;由于是付费专栏内容&#xff0c;若有错误请及时联系1_bit&#xff0c;博客链接&am…

如何在web api中使用SignalR

说明&#xff1a; 在webapi中使用signalr&#xff0c;使用IIS 环境&#xff1a; vs2012, .net4.5 第一步&#xff1a;建web api项目 第二步&#xff1a;nuget导入signalr Install-Package Microsoft.AspNet.SignalR Install-Package Microsoft.Owin.Cors &#xff08;用于…

Directx11学习笔记【二】 将HelloWin封装成类

我们把上一个教程的代码封装到一个类中来方便以后的使用。 首先新建一个空工程叫做MyHelloWin&#xff0c;添加一个main.cpp文件&#xff0c;然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面 MyWindow.h文件 1 /***************************************************…

Badboy自动化测试工具11 导出脚本用于Jmeter并发测试

本节主要讲解利用Jmeter进行并发测试和引入图像报表 1. 在Jmeter中打开上节课&#xff08;10&#xff09;Badboy导出的在拉手网查询KTV的脚本Lashou_Search.jmx. 2. 右击Lashou节点&#xff0c;Add->Listener->Aggregate Graph & Graph Results 3. 对图像报表进行配置…

ArcGIS实验教程——实验三十九:ArcGIS多元分类(ISO聚类分析、最大似然分类、主成分分析)案例教程

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 一、ISO聚类1. ISO聚类简介2. ISO聚类进行非监督分类实验操作二、最大似然分类1. 最大似然简介2. 最大似然分类实验案例三、主成分分析1. 主成分分析简介2. 主成分分析实验案例四、配套实…

ABP Framework 5.3.0 版本新增功能和变更说明

ABP Framework 5.3.0 稳定版已在2022年6月14日正式发布。以下是本版本的新增功能&#xff1a;• “开始”页面提供创建单层项目选项• 启动模板提供 PWA 支持• Volo.Abp.Gdpr.Abstractions 包介绍• 将发件箱中的事件批量发布到事件总线• eShopOnAbp 项目改进和电子书公告• …

智能合约开发——TypeScript 基础(全)

TS 准备 首先我们准备一个目录&#xff0c;使用 dos 进入到某目录&#xff0c;当然你直接 vs 打开终端执行也是没有问题的&#xff1a; 执行以下命令安装 typescrip&#xff08;不用进入目录&#xff0c;直接安装即可&#xff09;&#xff1a; npm install -g typescript我是…

利用Signalr实现手机端App扫码登录web页面

实现原理&#xff1a; 1、web登录页面&#xff0c;利用jquery.qrcode展示一个随机生成的登录码的二维码&#xff1b; 2、手机App扫描二维码取得登录码&#xff1b; 3、手机App将本地用户id登录码通过api提交服务器&#xff1b; 4、服务器api&#xff0c;收到手机App请求&am…

【ArcGIS风暴】ArcGIS栅格影像(NDVI)归一化处理的两种方法精解

【ArcGIS遇上Python】ArcGIS批量处理栅格影像(NDVI)归一化完整案例代码 图像归一化是指对图像进行了一系列标准的处理变换,使之变换为一固定标准形式的过程,该标准图像称作归一化图像。 原始图像在经历一些处理或攻击后可以得到多种副本图像,这些图像在经过相同参数的图像…

以小见大:一个领域建模的简单示例,理解“领域驱动”。

背景&#xff1a;航空公司为了确保飞行路线不发生冲突&#xff0c;需要开发一款飞行路线管理软件。过程&#xff1a;我们先去找这个领域的专家&#xff0c;自然是作为平时管理和维护机场飞行秩序的工作人员&#xff1b;我们第一个目标就是与他们沟通&#xff0c;也许我们并不能…

【ArcGIS遇上Python】ArcGIS批量处理栅格影像(NDVI)归一化完整案例代码

文章《ArcGIS栅格影像(NDVI)归一化处理的两种方法精解》详细介绍了ArcGIS中进行NDVI影像归一化处理的两种方法,但是无法批量进行,本文就放大招用Python实现批量NDVI归一化处理,大大提高了工作效率,还不赶快Get了? 完整Python代码: import arcpy from arcpy import env…

Spark1.0.0 属性配置

1&#xff1a;Spark1.0.0属性配置方式Spark属性提供了大部分应用程序的控制项&#xff0c;而且能够单独为每一个应用程序进行配置。在Spark1.0.0提供了3种方式的属性配置&#xff1a;SparkConf方式 SparkConf方式能够直接将属性值传递到SparkContext&#xff1b;SparkConf能够对…

Lync Server 2010迁移至Lync Server 2013部署系列 Part1: 扩展AD架构

由于最近直在忙Lync 升级&#xff0c;好久没有更新博客了&#xff0c;今天开始将对最近做的Lync Server 2010迁移至Lync Server 2013项目做一个系列的部署操作更新&#xff0c;希望能给即将在企业中部署的兄弟们有所帮助&#xff0c;在这个测试环境中&#xff0c;企业 前端池共…

Hello Playwright:(7)模拟键盘和鼠标

尽管在上一节中&#xff0c;我们已经能够通过FillAsync或ClickAsync来实现输入和点击元素。但是&#xff0c;还有其他场景&#xff0c;我们必须模拟用户使用键盘、鼠标与页面交互。例如在线文档&#xff1a;Page.Keyboard 对象Keyboard提供用于管理虚拟键盘的 API&#xff0c;它…

【ArcGIS遇上Python】Python批量将多个文件夹下的多个影像数据镶嵌至新栅格

ArcGIS虽然可以实现一次多个影像同时参与,拼接成一个整的影像,但是通常情况下,多个影像并不在同一个文件夹下,这样拼接的时候需要逐个手动进行添加,如果数据量大的话,跟不就不可取,针对这一问题,本文采用Python,实现将多个文件夹下的多个影像拼接,高效快速。 我们以…

2019全球开发者调查:仅2%的人996,Python并不是最受喜爱的语言

导读&#xff1a;开发者社区正在发生哪些变化&#xff1f;Stack Overflow 的最新调查获得了一些预料之外的结果&#xff1a;Java 语言开发者的平均收入不到 35 万元人民币&#xff0c;成为了收入最低的群体&#xff1b;另一方面&#xff0c;人工智能领域流行的 Python 并不是最…

一般地

2019独角兽企业重金招聘Python工程师标准>>> 1.EO的Updatable属性默认为Always&#xff0c;基于EO创建的VO也是。而基于SQL创建VO的Updatable属性默认为Never&#xff0c;如果要修改&#xff08;例如将VO拖至页面生成Form用于新增&#xff09;&#xff0c;则需将该属…