bzoj1179 [Apio2009]Atm——缩环最长路
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1179
tarjan 缩环,然后求到有酒吧的点的最长路即可;
但一开始想缩环后用拓扑序求答案,不由分说的秒WA了,不知道为什么...
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
typedef long long ll;
int const maxn=5e5+;
int n,m,hd[maxn],ct,deg[maxn],col[maxn],cr,head[maxn],sta[maxn],top;
int st,xt,dfn[maxn],low[maxn],tim,a[maxn],p;
ll val[maxn],ans,dis[maxn];
bool vis[maxn],bar[maxn],b[maxn];
queue<int>q;
struct N{
int to,nxt;
N(int t=,int n=):to(t),nxt(n) {}
}ed[maxn],edge[maxn];
void tarjan(int x)
{
dfn[x]=low[x]=++tim;
vis[x]=; sta[++top]=x;
for(int i=hd[x],u;i;i=ed[i].nxt)
{
if(!dfn[u=ed[i].to])tarjan(u),low[x]=min(low[x],low[u]);
else if(vis[u])low[x]=min(low[x],dfn[u]);
}
if(low[x]==dfn[x])
{
int y; cr++;
while((y=sta[top])!=x)
{
vis[y]=; col[y]=cr; top--;
val[cr]+=a[y];
if(bar[y])b[cr]=;
}
vis[x]=; col[x]=cr; top--;
val[cr]+=a[x]; if(bar[x])b[cr]=;
}
}
//void topo()
//{
// memset(vis,0,sizeof vis);
// for(int i=1;i<=cr;i++)
// if(!deg[i])q.push(i);
// while(q.size())
// {
// int x=q.front(); q.pop();
// if(b[x])vis[x]=1;
// for(int i=head[x],u;i;i=edge[i].nxt)
// {
// if(col[st]==(u=edge[i].to)&&vis[x]){ans=max(ans,val[x]); continue;}
// if(vis[x])vis[u]=1;
// val[u]+=val[x]; deg[u]--;
// if(!deg[u])q.push(u);
// }
// }
// ans+=val[col[st]];
//}
void spfa()
{
memset(vis,,sizeof vis);
q.push(col[st]); dis[col[st]]=val[col[st]]; vis[col[st]]=;
while(q.size())
{
int x=q.front(); q.pop(); vis[x]=;
for(int i=head[x],u;i;i=edge[i].nxt)
{
if(dis[u=edge[i].to]<dis[x]+val[u])
{
dis[u]=dis[x]+val[u];
if(!vis[u])vis[u]=,q.push(u);
}
}
}
for(int i=;i<=cr;i++)
if(b[i])ans=max(ans,dis[i]);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);
ed[++ct]=N(y,hd[x]); hd[x]=ct;
}
for(int i=;i<=n;i++)scanf("%d",&a[i]);
scanf("%d%d",&st,&p);
for(int i=,x;i<=p;i++)scanf("%d",&x),bar[x]=;
for(int i=;i<=n;i++) if(!dfn[i])tarjan(i);
for(int i=;i<=n;i++)
for(int j=hd[i],u;j;j=ed[j].nxt)
if(col[u=ed[j].to]!=col[i])
{
edge[++xt]=N(col[u],head[col[i]]); head[col[i]]=xt;
// deg[col[i]]++;
}
// topo();
spfa();
printf("%lld\n",ans);
return ;
}
bzoj1179 [Apio2009]Atm——缩环最长路的更多相关文章
- BZOJ1179 : [Apio2009]Atm 缩点+spfa
1179: [Apio2009]Atm Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 2069 Solved: 826[Submit][Status ...
- bzoj1179: [Apio2009]Atm 【缩点+spfa最长路】
题目传送门 Description Siruseri 城中的道路都是单向的.不同的道路由路口连接.按照法律的规定, 在每个路口都设立了一个 Siruser i 银行的 ATM 取款机.令人奇怪的是,S ...
- [BZOJ1179] [Apio2009]Atm(tarjan缩点 + spfa)
传送门 题意 N个点M条边的有向图 每个点有点权 从某一个结点出发 问能获得的最大点权和 一个点的点权最多被计算一次 N<=500000 M<=500000 思路 先tarjan缩点,然后 ...
- bzoj1179: [Apio2009]Atm scc缩点+dag上dp
先把强连通缩点,然后变成了dag,dp求终点是酒吧的最长路即可, /************************************************************** Pro ...
- 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 ...
- ZOJ 3795:Grouping(缩点+最长路)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5303 题意:有n个人m条边,每条边有一个u,v,代表u的年龄大于等于v,现在要 ...
- poj 3592 Instantaneous Transference 缩点+最长路
题目链接 给一个n*m的图, 从0, 0这个点开始走,只能向右和向下. 图中有的格子有值, 求能获得的最大值. 其中有些格子可以传送到另外的格子, 有些格子不可以走. 将图中的每一个格子都看成一个点, ...
- 【强连通分量+spfa】Bzoj1179 Apio2009 Atm
Description Solution 显然缩强连通分量,然后求最长路,虽然是DAG但还是有点麻烦,于是用了spfa. Code 重建图_数组写错好多次,感觉做这题也就是练了一下实现. #inclu ...
随机推荐
- [Windows Server 2008] IIS自带FTP配置方法
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:IIS自带FT ...
- [Windows Server 2008] ASP.net安装方法
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:安装ASP.n ...
- java 向上,向下转型
在对Java学习的过程中,对于转型这种操作比较迷茫,特总结出了此文.例子参考了<Java编程思想>. 目录 几个同义词 向上转型与向下转型 例一:向上转型,调用指定的父类方法 例二:向上转 ...
- sql 分析 依赖beanutils
你还在为sql语句的拼接而烦恼吗? sql语句支持表达式了! package com.newland.bi.webservice.common.manage; import java.util.Arr ...
- 【Caffe】Ubuntu16.04上配置安装caffe(Only CPU)
一.首先看看自己的系统,Ubuntu16.04,cpu,没有Nvidia,没有opencv 二.安装依赖包 安装protobuf,leveldb,snappy,OpenCV,hdf5, protobu ...
- (转)分布式文件存储FastDFS(三)FastDFS配置
http://blog.csdn.net/xingjiarong/article/details/50559768 在上一节中我们一起搭建了一个单节点的FastDFS系统,但是仅仅将系统搭建起来是远远 ...
- CDR软件-CorelDRAW软件下载,618活动
618我有诚意,你呢? 不花钱的618,是残缺的618 给自己一个放肆shopping的机遇 活动力度不够大? 继续升级,终极体验 618疯狂倒计时! 同志们,如果你错过了之前的抢先购和升级活动 那么 ...
- 微信小程序video监测播放进度
video组件提供的进度相关的监测只有 bindtimeupdate ,官方说明这个函数250ms触发一次,在开发者工具上基本符合,但在真机上每隔1秒触发一次.达不到我们要求的精度.对比下音频,wx. ...
- Day 11 文件和异常
文件和异常 在实际开发中,常常需要对程序中的数据进行持久化操作,而实现数据持久化最直接简单的方式就是将数据保存到文件中.说到“文件”这个词,可能需要先科普一下关于文件系统的知识,对于这个概念,维基百科 ...
- react typescript 父组件调用子组件
//父组件import * as React from 'react'import { Input } from 'antd'const Search = Input.Searchimport &qu ...