BZOJ1179 [Apio2009]Atm Tarjan 强连通缩点 动态规划
欢迎访问~原文出处——博客园-zhouzhendong
去博客园看该题解
题目传送门 - BZOJ1179
题意概括
有一个有向图,每一个节点有一个权值,其中有一些结束点。
现在,你要从S出发,到达任意一个结束点,使得经过的节点的权值和最大(可以重复经过某一个节点,但是权值只记入一次)。
题解
小码农题。
如果有强连通分量,那么之间的点是可以全部拿到的,傻子才不拿。
所以先Tarjan强连通缩个点。
然后就是一个DAG(有向无环图)了。
那么就是一个记忆化dfs的问题了。
于是就简单了。
but,尴尬的我犯了低级错误,又wa了一次……

代码
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
const int N=+;
const int Inf=;
struct Gragh{
int cnt,x[N],y[N],nxt[N],fst[N];
void set(){
cnt=;
memset(fst,,sizeof fst);
}
void add(int a,int b){
x[++cnt]=a,y[cnt]=b;
nxt[cnt]=fst[a],fst[a]=cnt;
}
}g,g2;
int n,m,time,top,tot;
int dfn[N],low[N],bh[N],st[N],w[N],v[N],dp[N],S,P;
bool inst[N],vis[N],isp[N],fip[N];
void Tarjan_Prepare(){
time=top=tot=;
memset(bh,,sizeof bh);
memset(st,,sizeof st);
memset(dfn,,sizeof dfn);
memset(low,,sizeof low);
memset(vis,,sizeof vis);
memset(inst,,sizeof inst);
}
void Tarjan(int x){
dfn[x]=low[x]=++time;
inst[x]=vis[x]=;
st[++top]=x;
for (int i=g.fst[x];i;i=g.nxt[i])
if (!vis[g.y[i]]){
Tarjan(g.y[i]);
low[x]=min(low[x],low[g.y[i]]);
}
else if (inst[g.y[i]])
low[x]=min(low[x],low[g.y[i]]);
if (dfn[x]==low[x]){
tot++;
bh[st[top]]=tot;
inst[st[top]]=;
while (st[top--]!=x){
bh[st[top]]=tot;
inst[st[top]]=;
}
}
}
int dfs(int x){
if (dp[x]!=-Inf)
return dp[x];
dp[x]=fip[x]?v[x]:-Inf;
for (int i=g2.fst[x];i;i=g2.nxt[i])
dp[x]=max(dp[x],dfs(g2.y[i])+v[x]);
return dp[x];
}
int main(){
g.set();
scanf("%d%d",&n,&m);
for (int i=,a,b;i<=m;i++){
scanf("%d%d",&a,&b);
g.add(a,b);
}
for (int i=;i<=n;i++)
scanf("%d",&w[i]);
scanf("%d%d",&S,&P);
memset(isp,,sizeof isp);
memset(fip,,sizeof fip);
memset(v,,sizeof v);
for (int i=,pos;i<=P;i++){
scanf("%d",&pos);
isp[pos]=;
}
Tarjan_Prepare();
for (int i=;i<=n;i++)
if (!vis[i])
Tarjan(i);
g2.set();
for (int i=;i<=n;i++)
v[bh[i]]+=w[i],fip[bh[i]]|=isp[i];
for (int i=;i<=g.cnt;i++)
if (bh[g.x[i]]!=bh[g.y[i]])
g2.add(bh[g.x[i]],bh[g.y[i]]);
for (int i=;i<=tot;i++)
dp[i]=-Inf;
printf("%d",dfs(bh[S]));
return ;
}
BZOJ1179 [Apio2009]Atm Tarjan 强连通缩点 动态规划的更多相关文章
- BZOJ1051 [HAOI2006]受欢迎的牛 Tarjan 强连通缩点
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1051 题意概括 有n只牛,有m个羡慕关系. 羡慕关系具有传递性. 如果A羡慕B,B羡慕C,那么我们 ...
- BZOJ1179 [Apio2009]Atm 【tarjan缩点】
1179: [Apio2009]Atm Time Limit: 15 Sec Memory Limit: 162 MB Submit: 4048 Solved: 1762 [Submit][Sta ...
- BZOJ1179 : [Apio2009]Atm 缩点+spfa
1179: [Apio2009]Atm Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 2069 Solved: 826[Submit][Status ...
- NOIP2017提高组Day1T3 逛公园 洛谷P3953 Tarjan 强连通缩点 SPFA 动态规划 最短路 拓扑序
原文链接https://www.cnblogs.com/zhouzhendong/p/9258043.html 题目传送门 - 洛谷P3953 题目传送门 - Vijos P2030 题意 给定一个有 ...
- bzoj1179: [Apio2009]Atm scc缩点+dag上dp
先把强连通缩点,然后变成了dag,dp求终点是酒吧的最长路即可, /************************************************************** Pro ...
- BZOJ 1179: [Apio2009]Atm( tarjan + 最短路 )
对于一个强连通分量, 一定是整个走或者不走, 所以tarjan缩点然后跑dijkstra. ------------------------------------------------------ ...
- 【BZOJ-1179】Atm Tarjan + SPFA
1179: [Apio2009]Atm Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 2407 Solved: 993[Submit][Status ...
- 【CCF】高速公路 tarjan强连通缩点
[题意] 给定一个有向图,问图中互相可达(强连通)的点有多少对 [AC] 强连通缩点,缩点后是一个DAG,所以互相可达的点只在强连通块里. #include<iostream> #incl ...
- 【bzoj1179】[Apio2009]Atm Tarjan缩点+Spfa最长路
题目描述 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每 ...
随机推荐
- 树的dfs序.欧拉序
dfs序 ==先序,连续一段区间就是子树
- php 全局变量问题
当在函数里通过require_once包含另外php文件. 而另外php文件包含了另外php文件,而该php文件的函数需要另外的php文件. 例子: installment_maintenance_s ...
- Mask RCNN 学习笔记
下面会介绍基于ResNet50的Mask RCNN网络,其中会涉及到RPN.FPN.ROIAlign以及分类.回归使用的损失函数等 介绍时所采用的MaskRCNN源码(python版本)来源于GitH ...
- weblogic对JSP预编译、weblogic读取JSP编译后的class文件、ant中weblogic.jspc预编译JSP
我们都知道在weblogic中JSP是每次第一次访问的时候才会编译,这就造成第一次访问某个JSP的时候性能下降,有时候我们也希望JSP被编译成class然后打包在jar中实现隐藏JSP的功能,下面介绍 ...
- Android常用逆向工具+单机游戏破解
android开发环境搭建 我理解的学习路线是首先要掌握和了解常见的工具.搭建环境.然后就是缓慢的积累特征,通过长期的练习使自己进步,通过android逆向课程的学习.常用的工具如下: android ...
- BN讲解(转载)
本文转载自:http://blog.csdn.net/shuzfan/article/details/50723877 本次所讲的内容为Batch Normalization,简称BN,来源于< ...
- saltStack的event接口通过mysql数据库接收SaltStack批量管理日志
event是一个本地的ZeroMQ PUB Interface,event是一个开放的系统,用于发送信息通知salt或其他的操作系统.每个event都有一个标签.事件标签允许快速制定过滤事件.除了标签 ...
- nagios系列(一)centos6.5环境部署nagios服务端
nagios软件安装包存放目录:/home/oldboy/tools nagios服务安装目录:/usr/local/nagios 1.配置yum源 echo "------ step 1: ...
- iptables实现网络防火墙及地址转换
iptables主机防火墙功能及常用命令 FSM:Finite State Machine 有限状态机 客户端:closed -->syn_sent -->established --&g ...
- 转载:Java中的字符串常量池详细介绍
引用自:http://blog.csdn.net/langhong8/article/details/50938041 这篇文章主要介绍了Java中的字符串常量池详细介绍,JVM为了减少字符串对象的重 ...