题目描述

样例

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
47

解析

题目明显是最长路,可以用spfa求最长路,但数据范围5e5明显不允许,所以我们可以用tarjan优化一下,然后这就变成了一道

tarjan板子题,先用tarjan缩点,点权为几个点之和,把所有点再存到一个数组中,再按之前建图关系,把不在一个块的点连边

再跑一遍spfa就可以了

solution


#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+5;
const int INF=0x7f7f7f7f;
int tot,head[MAXN],nxt[MAXN<<1],to[MAXN<<1],pre[MAXN],vis[MAXN],low[MAXN];
int n,m,s,st,t,h,r,c,d,cnt,now,ans,w,sum,num,val[MAXN],id[MAXN],out[MAXN];
int a[MAXN],b[MAXN],bill[MAXN],x[MAXN],y[MAXN],dis[MAXN];
void add(int x,int y)
{
to[++tot]=y;
nxt[tot]=head[x];
head[x]=tot;
}
stack<int>p;
void tarjan(int u)
{
pre[u]=low[u]=++cnt;
p.push(u);
vis[u]=1;
for(int i=head[u];i;i=nxt[i])
{
int y=to[i];
if(!pre[y])
{
tarjan(y);
low[u]=min(low[u],low[y]);
}
else if(vis[y])
{
low[u]=min(low[u],pre[y]);
}
}
if(low[u]==pre[u])
{
num++;
int temp=-1;
while(temp!=u){
temp=p.top();
p.pop();
vis[temp]=0;
id[temp]=num;//把所有点再存到这个数组中
val[num]+=a[temp];//块点权为所有包含点之和
if(b[temp]) bill[num]=1;//如果缩进的点有酒吧,则本块又酒吧
}
}
}
queue<int>q;
void spfa()//spfa求最长路
{
memset(dis,-0x7f7f7f7f,sizeof(dis));
q.push(id[st]);
dis[id[st]]=val[id[st]];//先加上本点点权,以后跑的边的边权即为边通向点的点权
//vis[st]=true;
while(!q.empty())
{
s=q.front();
q.pop();
vis[s]=false;
for(int i=head[s];i;i=nxt[i])
{
int y=to[i];
if(dis[y]<dis[s]+val[y])//保证权值为正,不用判负环
{
dis[y]=dis[s]+val[y];
if(!vis[y])
{
q.push(y);
vis[y]=true;
}
}
}
}
ans=-INF;
for(int i=1;i<=num;i++)
{
if(bill[i]) ans=max(ans,dis[i]);//只看有酒吧的
}
printf("%d",ans);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&r,&c);
x[i]=r,y[i]=c;//记录链接点
add(r,c);
}
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
scanf("%d%d",&st,&t);
for(int i=1;i<=t;i++)
{
scanf("%d",&d);
b[d]=1;//有酒吧
}
for(int i=1;i<=n;i++)if(!pre[i]) tarjan(i);
memset(head,0,sizeof(head));//缩点后重建图,初始化
tot=0;
for(int i=1;i<=m;i++) if(id[x[i]]!=id[y[i]]) add(id[x[i]],id[y[i]]);//原本连通的点是否在同一个块中,不在的建边
spfa();
return 0;
}

Atm/抢掠计划——题解的更多相关文章

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

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

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

    咕了四个小时整整一晚上 P3627 [APIO2009] 抢掠计划(https://www.luogu.org/problemnew/show/P3627) 不难看出答案即为该有向图的最长链长度(允许 ...

  3. [APIO2009]抢掠计划(Tarjan,SPFA)

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

  4. P3627 [APIO2009]抢掠计划

    P3627 [APIO2009]抢掠计划 Tarjan缩点+最短(最长)路 显然的缩点...... 在缩点时,顺便维护每个强连通分量的总权值 缩完点按照惯例建个新图 然后跑一遍spfa最长路,枚举每个 ...

  5. 【洛谷P3627】[APIO2009]抢掠计划

    抢掠计划 题目链接 比较水的缩点模板题,Tarjan缩点,重新建图,记录联通块的钱数.是否有酒吧 DAG上记忆化搜索即可 #include<iostream> #include<cs ...

  6. 洛谷 P3627 【抢掠计划】

    题库:洛谷 题号:3627 题目:抢掠计划 link:https://www.luogu.org/problem/P3627 思路 : 这道题是一道Tarjan + 最长路的题.首先,我们用Tarja ...

  7. APIO2009 抢掠计划 Tarjan DAG-DP

    APIO2009 抢掠计划 Tarjan spfa/DAG-DP 题面 一道\(Tarjan\)缩点水题.因为可以反复经过节点,所以把一个联通快中的所有路口看做一个整体,缩点后直接跑\(spfa\)或 ...

  8. 运输计划(题解)(Noip2015)

    运输计划(题解)(Noip2015) 二分答案+树上差分 树上差分其实不难,只是名字高大尚,可以学一下:Eternal风度的树上差分 本人博客里也总结了一些其他的知识供大家学习:Eternal风度的博 ...

  9. p3627&bzoj1179 抢掠计划(ATM)

    传送门(洛谷) 传送门(bzoj) 题目 Siruseri 城中的道路都是单向的.不同的道路由路口连接.按照法律的规定, 在每个路口都设立了一个 Siruser i 银行的 ATM 取款机.令人奇怪的 ...

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

    手动博客搬家: 本文发表于20170716 10:58:18, 原地址https://blog.csdn.net/suncongbo/article/details/81061601 https:// ...

随机推荐

  1. 关于JDK21控制台字符集编码问题

    关于JDK21控制台字符集编码问题 前言: 某日尝试JDK21,idea控制台字符集编码一直乱码,后将idea所有能配置UTF-8的配置都配了一遍,无果,后搜索JDK21字符集编码相关后解决 1.配置 ...

  2. USACO 4.1

    目录 洛谷 2737 麦香牛块 分析 代码 洛谷 2738 篱笆回路 分析 代码 麦香牛块洛谷传送门,麦香牛块USACO传送门,篱笆回路洛谷传送门,篱笆回路USACO传送门 洛谷 2737 麦香牛块 ...

  3. Git 安全远程访问:SSH 密钥对生成、添加和连接步骤解析

    使用 SSH 密钥对的 Git 安全远程访问:生成.添加和连接 SSH(Secure Shell)是一种用于安全远程访问的协议,它提供了加密通信和身份验证机制.在使用 SSH 连接到远程 Git 存储 ...

  4. Seaborn分布数据可视化---直方图/密度图

    直方图\密度图 直方图和密度图一般用于分布数据的可视化. distplot 用于绘制单变量的分布图,包括直方图和密度图. sns.distplot( a, bins=None, hist=True, ...

  5. Stable diffusion 初学者指南

    1. Stable diffusion 初学者指南 想掌握Stable Diffusion AI技术吗? 这份初学者指南专为完全没接触过Stable Diffusion或任何AI图像生成器的新手设计. ...

  6. Qt + mupdf 显示PDF,支持翻页

    使用Qt + mupdf 实现PDF阅读器,支持翻页(上一页.下一页) 思路: PDF阅读器:使用mupdf,将PDF文件拆分成单个page页,将page页转为QImage图像,使用QListWidg ...

  7. openGauss3.1.0 版本的gs_stack功能解密

    openGauss3.1.0 版本的 gs_stack 功能解密 不管是测试还是研发,工作中总有遇到各种各样的问题.比如,你有没有遇到过在数据库中执行某个 SQL,却一直不返回结果,这时候的你是不是非 ...

  8. 痞子衡嵌入式:使能i.MXRT1050,1060 Hab签名或加密启动时App链接在片内SRAM的限制

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是使能i.MXRT1050, 1060 Hab签名或加密启动时App链接在片内SRAM的限制. 最近有客户反馈,在 RT1060 上测试 ...

  9. 【Nano Framework ESP32 篇】刷入 nanoCLR 固件以及相关问题

    老周在几个世纪前曾写过树莓派相关的 iOT 水文,之所以没写 Nano Framework 相关的内容,是因为那时候这货还不成熟,可玩性不高.不过,这货现在已经相对完善,老周都把它用在项目上了--第一 ...

  10. 日志分析qsnctfwp

    使用工具:http Logs Viewer 使用 http Logs Viewer 载入 access.log 按照 Status 排序 其中大量 Status 为404的日志不难推断出,这是在进行目 ...