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,一经查实,立即删除!

相关文章

centos 新建swap区文件

一. 相当详细且流程完整&#xff0c;&#xff08;推荐阅读&#xff09; 在centos7上新建swap区 https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-centos-7 二. centos官网 转&#xff1a;https://www.centos.org/docs/5/html/5.2/Deployment_Guide/s2-sw…

ArcGIS实验教程——实验三十六:ArcGIS Python脚本的巧妙使用

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据)》 文章目录 一、ArcGIS脚本简介二、Python脚本与ArcPy三、Python窗口四、脚本编写(案例:矢量数据批量裁剪)五、在ModelBuilder中使用脚本工具一、ArcGIS脚本简介 脚本与模型相似,也是把处理过程…

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

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

C语言试题七十七之请编写函实现渔夫打鱼晒网问题

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 编写函数:…

.NetCore实现图片缩放与裁剪 - 基于ImageSharp

前言&#xff08;突然发现断更有段时间了最近在做博客的时候&#xff0c;需要实现一个类似Lorempixel、LoremPicsum这样的随机图片功能&#xff0c;图片有了&#xff0c;还需要一个根据输入的宽度高度获取图片的功能&#xff0c;由于之前处理图片时使用到了ImageSharp库&#x…

Mysql身份认证漏洞及利用(CVE-2012-2122) 补充测试用例

当连接MariaDB/MySQL时&#xff0c;输入的密码会与期望的正确密码比较&#xff0c;由于不正确的处理&#xff0c;会导致即便是memcmp()返回一个非零值&#xff0c;也会使MySQL认为两个密码是相同的。也就是说只要知道用户名&#xff0c;不断尝试就能够直接登入SQL数据库。按照公…

添加启动类

添加.h和cpp #pragma once #include "afxwin.h" class mySplash :public CWnd {DECLARE_DYNAMIC(mySplash)protected:DECLARE_MESSAGE_MAP()public:CBitmap m_bitmap;void Create(UINT nBitmapID);afx_msg void OnPaint();afx_msg void OnTimer(UINT_PTR nIDEvent); …

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

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

C语言试题七十八之请编写函实现求2个数的最大公约数和最小公倍数(辗转相除法)

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 求2个数的…

restful-api-design-references

之所以创建这个 repository&#xff0c;是因为我希望收集一些比较好的有关于 RESTful API 设计的参考文献。偶尔回顾&#xff0c;偶尔改进&#xff0c;大家一起来吧~ 如果你有更好的私藏文章&#xff0c;不凡分享出来&#xff0c;独乐乐不如众乐乐&#xff0c;(⊙o⊙) RESTful…

jQuery 3.4.0 Released(2019.4.10)

jQuery has a new release! It’s been a while since our last release, but we expect this to be the last minor release in the 3.x branch, and then we will move on to the overhaul that will be jQuery 4.0. But before we get to 4.0, we’re excited to share the …

C#-Linq源码解析之DefaultIfEmpty

前言在Dotnet开发过程中&#xff0c;DefaultIfEmpty作为IEnumerable的扩展方法&#xff0c;十分常用。本文对DefaultIfEmpty方法的关键源码进行简要分析&#xff0c;以方便大家日后更好的使用该方法。使用DefaultIfEmpty 返回 IEnumerable< T> 的元素&#xff1b;如果序列…

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

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

Zabbix3.0 安装Graphtree

zabbix中&#xff0c;想要集中展示图形&#xff0c;唯一的选择是screen&#xff0c;zatree可以解决这个问题&#xff0c;但是性能不是很好。 Graphtree由OneOaas开发并开源出来&#xff0c;用来解决zabbix的图形展示问题&#xff0c;性能比较好 因为默认的zabbix 展示图形很麻烦…

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

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

Android之实现点击布局缩小然后再放大动画

1、需求 现在需要实现点击View先缩小然后再放大效果 2、代码实现 在res的anim目录下面&#xff0c;写anim_small.xml文件 <?xml version"1.0" encoding"utf-8"?> <set xmlns:android"http://schemas.android.com/apk/res/android"…

如何在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. 主成分分析实验案例四、配套实…