【强连通分量+spfa】Bzoj1179 Apio2009 Atm
Description

Solution
显然缩强连通分量,然后求最长路,虽然是DAG但还是有点麻烦,于是用了spfa。
Code
重建图_数组写错好多次,感觉做这题也就是练了一下实现。
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=5e+; int pre[maxn],low[maxn],clock;
int scc[maxn],val[maxn],cnt,a[maxn],t;
int head[maxn],f[maxn],e[maxn],nxt[maxn],k;
int adde(int u,int v){
f[++k]=u,e[k]=v;
nxt[k]=head[u],head[u]=k;
}
int n,m,s,p;
int w[maxn],ok[maxn]; int dfs(int u){
//printf("%d\n",u);
pre[u]=low[u]=++clock;
a[++t]=u;
for(int i=head[u];i;i=nxt[i]){
int v=e[i];
if(!pre[v]){
dfs(v);
low[u]=min(low[u],low[v]);
}
else if(!scc[v]){
low[u]=min(low[u],pre[v]);
}
}
if(low[u]==pre[u]){
++cnt;
while(t){
scc[a[t]]=cnt;
val[cnt]+=w[a[t]];
if(a[t--]==u) break;
}
}
} int ok_[maxn];
int head_[maxn],e_[maxn],nxt_[maxn],k_;
int adde_(int u,int v){
e_[++k_]=v;
nxt_[k_]=head_[u],head_[u]=k_;
} int rebuild(){
for(int i=;i<=k;i++){
int u=scc[f[i]],v=scc[e[i]];
if(u!=v) adde_(u,v);
}
for(int i=;i<=n;i++)
if(ok[i]) ok_[scc[i]]=;
} int q[maxn],d[maxn],inque[maxn],ans,h;
int spfa(){
t=;
s=scc[s];
q[++t]=s;
inque[s]=;
d[s]=val[s];
ans=d[s];
while(h<t){
int u=q[++h];
//printf("%d\n",u);
for(int i=head_[u];i;i=nxt_[i]){
int v=e_[i];
if(d[u]+val[v]>d[v]){
//printf(" %d\n",v);
d[v]=d[u]+val[v];
if(ok_[v]) ans=max(ans,d[v]);
if(!inque[v]) inque[v]=,q[++t]=v;
}
}
inque[u]=;
}
} int main(){
scanf("%d%d",&n,&m);
int u,v,x;
for(int i=;i<=m;i++){
scanf("%d%d",&u,&v);
adde(u,v);
}
for(int i=;i<=n;i++)
scanf("%d",&w[i]);
scanf("%d%d",&s,&p);
for(int i=;i<=p;i++)
scanf("%d",&x),ok[x]=; for(int i=;i<=n;i++)
if(!pre[i]) dfs(i); rebuild();
spfa();
printf("%d\n",ans);
return ;
}
【强连通分量+spfa】Bzoj1179 Apio2009 Atm的更多相关文章
- bzoj1179: [Apio2009]Atm 【缩点+spfa最长路】
题目传送门 Description Siruseri 城中的道路都是单向的.不同的道路由路口连接.按照法律的规定, 在每个路口都设立了一个 Siruser i 银行的 ATM 取款机.令人奇怪的是,S ...
- BZOJ1179 [Apio2009]Atm Tarjan 强连通缩点 动态规划
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1179 题意概括 有一个有向图,每一个节点有一个权值,其中有一些结束点. 现在,你要从S出发,到达任 ...
- BZOJ1179 : [Apio2009]Atm 缩点+spfa
1179: [Apio2009]Atm Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 2069 Solved: 826[Submit][Status ...
- 【Tarjan】+【SPFA】APIO2009 Atm
一.算法介绍 tarjan——求解有向图强连通分量.这个算法在本人的一篇blog中有介绍,这里就不赘述了.贴上介绍tarjan的的blog链接:http://www.cnblogs.com/Maki- ...
- BZOJ1179 [Apio2009]Atm 【tarjan缩点】
1179: [Apio2009]Atm Time Limit: 15 Sec Memory Limit: 162 MB Submit: 4048 Solved: 1762 [Submit][Sta ...
- 【强联通分量缩点】【最短路】【spfa】bzoj1179 [Apio2009]Atm
缩点后转化成 DAG图上的单源最长路问题.spfa/dp随便. #include<cstdio> #include<queue> #include<algorithm&g ...
- [BZOJ1179] [Apio2009]Atm(tarjan缩点 + spfa)
传送门 题意 N个点M条边的有向图 每个点有点权 从某一个结点出发 问能获得的最大点权和 一个点的点权最多被计算一次 N<=500000 M<=500000 思路 先tarjan缩点,然后 ...
- bzoj1179 [Apio2009]Atm
Description Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口 ...
- bzoj1179: [Apio2009]Atm scc缩点+dag上dp
先把强连通缩点,然后变成了dag,dp求终点是酒吧的最长路即可, /************************************************************** Pro ...
随机推荐
- AS3中的mouseEnabled与mouseChild
InteractiveObject类的一个属性,InteractiveObject类是用户可以使用鼠标和键盘与之交互的所有显示对象的抽象基类.我们不能直接实例化InteractiveObject类.m ...
- Activex、OLE、COM、OCX、DLL之间有什么区别?
来源:http://www.blogjava.net/Jack2007/archive/2008/04/27/196392.html 熟悉面向对象编程和网络编程的人一定对ActiveX ...
- JavaScript验证和数据处理的干货(经典)
在开发web项目的时候,难免遇到各种对网页数据的处理,比如对用户在表单中输入的电话号码.邮箱.金额.身份证号.密码长度和复杂程度等等的验证,以及对后台返回数据的格式化比如金额,返回的值为null,还有 ...
- DjangoUeditor项目的集成
DjangoUeditor这个项目,出品人已经不再提供维护支持. 最近在一个使用到aliyun oss的项目里集成了一次这个东西,当然我之前在普通文件上传的北京下已经集成过很多次了. 主要修改的东西就 ...
- 利用HTML5,前端js实现图片压缩
http://blog.csdn.NET/qazwsx2345/article/details/21827553 主要用了两个HTML5的 API,一个file,一个canvas,压缩主要使用cnav ...
- C++笔记019:C++中的const修饰的是一个真正的常量
原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 程序一: 我们知道数组的下标不能为变量,必须是一个确定的值.在C语言中看程序: #define a 10 int main() { //第 ...
- C语言出来多久了你知道吗?
在20世纪80年代,为了避免不同开发者使用的C语言语法的差异,美国国家标准局为C语言开发了一套完整的美国国家标准语言文法,称为ANSI C,作为C语言的初始标准.. [1] 2011年12月8日,国际 ...
- Solr(三)向solr-5.5.4中添加数据
Solr添加数据 一 首先在创建好的CORE中添加自己需要的Field(可以理解为表的字段) 1 切换到配置Field的文件目录,编辑配置Field的文件 managed-schema cd /usr ...
- C#实现的HttpGet请求
话不多说,代码贴上: /// <summary> /// HTTP Get请求 /// </summary> /// <param name="url" ...
- Lua读取CSV文件到table中
创建Lua函数载入CSV文件并保存到表中的函数: function GetLines(fileName) indx = 0 myLines ={} for line in io.line(string ...