luogu P3387 【模板】缩点_拓扑排序
还是很好些的.
Code:
#include <stack>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cstring>
#include <map>
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
namespace Tarjan{
#define maxn 1000000
#define ll long long
map<int,int>ed[maxn];
int scc,sig;
int vis[maxn];
int du[maxn];
int idx[maxn];
int pre[maxn],low[maxn];
int val[maxn];
long long value[maxn];
long long ans[maxn];
stack<int>S;
queue<int>Q;
struct graph{
int cnt;
int head[maxn],to[maxn<<1],nex[maxn<<1];
void addedge(int u,int v){
nex[++cnt] = head[u],head[u]=cnt,to[cnt] = v;
}
}G1,G2;
void tarjan(int u){
S.push(u);
vis[u] = 1;
pre[u] = low[u] = ++scc;
for(int v=G1.head[u];v;v=G1.nex[v]){
if(!vis[G1.to[v]]) {
tarjan(G1.to[v]);
low[u] = min(low[u],low[G1.to[v]]);
}
else if(vis[G1.to[v]] == 1) low[u] = min(low[u],pre[G1.to[v]]);
}
if(pre[u] == low[u]) {
++sig;
for(;;){
int a=S.top(); S.pop();
vis[a] = -1,idx[a] = sig;
value[sig] += (ll)val[a];
if(a==u) break;
}
}
}
void toposort(){
for(int i=1;i<=sig;++i)
for(int j=G2.head[i];j;j=G2.nex[j]) ++du[G2.to[j]];
for(int i=1;i<=sig;++i) if(du[i]==0) Q.push(i),ans[i] = value[i];
while(!Q.empty()){
int u=Q.front(); Q.pop();
for(int v=G2.head[u];v;v=G2.nex[v]){
ans[G2.to[v]] = max(ans[G2.to[v]],ans[u] + value[G2.to[v]]);
--du[G2.to[v]];
if(du[G2.to[v]]==0) Q.push(G2.to[v]);
}
}
long long fin=0;
for(int i=1;i<=sig;++i)
fin=max(fin,ans[i]);
printf("%lld",fin);
}
int main(){
int n,m,a,b;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i) scanf("%d",&val[i]);
for(int i=1;i<=m;++i) {
scanf("%d%d",&a,&b);
G1.addedge(a,b);
}
for(int i=1;i<=n;++i) if(!vis[i]) tarjan(i);
for(int i=1;i<=n;++i)
for(int v=G1.head[i];v;v=G1.nex[v])
if(idx[i]!=idx[G1.to[v]] && !ed[idx[i]][idx[G1.to[v]]])
G2.addedge(idx[i],idx[G1.to[v]]),ed[idx[i]][idx[G1.to[v]]]=1;
toposort();
return 0;
}
};
int main(){
Tarjan::main();
return 0;
}
luogu P3387 【模板】缩点_拓扑排序的更多相关文章
- b2OJ_1565_[NOI2009]植物大战僵尸_拓扑排序+最大权闭合子图
b2OJ_1565_[NOI2009]植物大战僵尸_拓扑排序+最大权闭合子 题意:n*m个植物,每个植物有分数(可正可负),和能保护植物的位置.只能从右往左吃,并且不能吃正被保护着的,可以一个不吃,求 ...
- BZOJ_4010_[HNOI2015]菜肴制作_拓扑排序+贪心
BZOJ_4010_[HNOI2015]菜肴制作_拓扑排序+贪心 Description 知名美食家小 A被邀请至ATM 大酒店,为其品评菜肴. ATM 酒店为小 A 准备了 N 道菜肴,酒店按照为菜 ...
- [LOJ 3101] [Luogu 5332] [JSOI2019]精准预测(2-SAT+拓扑排序+bitset)
[LOJ 3101] [Luogu 5332] [JSOI2019]精准预测(2-SAT+拓扑排序+bitset) 题面 题面较长,略 分析 首先,发现火星人只有死和活两种状态,考虑2-SAT 建图 ...
- 【模拟7.16】通讯(tarjan缩点加拓扑排序)
这题确实水,纯板子,考试意外出错,只拿了暴力分QAQ tarjan缩点加上拓扑排序,注意这里求最短路径时不能用最小生成树 因为是单向边,不然就可能不是一个联通图了.... 1 #include< ...
- 【Luogu P3387】缩点模板(强连通分量Tarjan&拓扑排序)
Luogu P3387 强连通分量的定义如下: 有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶 ...
- P3387缩点(tarjan+拓扑排序+线性dp)
题目描述 给定一个 n个点 m 条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次. 输入 ...
- 【BZOJ-1924】所驼门王的宝藏 Tarjan缩点(+拓扑排序) + 拓扑图DP
1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 787 Solved: 318[Submit][Stat ...
- NOIP 车站分级 (luogu 1983 & codevs 3294 & vijos 1851) - 拓扑排序 - bitset
描述 一条单向的铁路线上,依次有编号为 1, 2, ..., n 的 n 个火车站.每个火车站都有一个级别,最低为 1 级.现有若干趟车次在这条线路上行驶,每一趟都满足如下要求:如果这趟车次停靠了火车 ...
- [Luogu P3953] 逛公园 (最短路+拓扑排序+DP)
题面 传送门:https://www.luogu.org/problemnew/show/P3953 Solution 这是一道神题 首先,我们不妨想一下K=0,即求最短路方案数的部分分. 我们很容易 ...
随机推荐
- Project Euler 8 Largest product in a series
题意:寻找这 1000 个数中相邻 13 个数相乘积最大的值 思路:首先想到的是暴力,但是还可以利用之前记录过的数值,什么意思呢?即在计算 2 - 14 后,再计算 3 - 15 时完全可以利用之前计 ...
- ftp服务器在linux中安装
1.安装 执行 yum -y install vsftpd 2.检验是否安装vsftpd : rmp -qa | grep vsftpd 默认配置文件/ect/vsftpd/vsftpd.c ...
- 全球级的分布式数据库 Google Spanner原理
开发四年只会写业务代码,分布式高并发都不会还做程序员?->>> Google Spanner简介 Spanner 是Google的全球级的分布式数据库 (Globally-Di ...
- CF876A Trip For Meal
CF876A Trip For Meal 题意翻译 小熊维尼非常喜欢蜂蜜! 所以他决定去拜访他的朋友. 小熊有三个最好的朋友:兔子,猫头鹰和小毛驴,每个人都住在自己的房子里. 每对房屋之间都有蜿蜒的小 ...
- 从零開始写游戏引擎(一) - project创建以及文件夹设置还有版本号控制
一句话提要 好的開始等于成功了一半. 创建文件夹结构 project文件夹下最好分为以下几个文件夹 Docs - 开发文档,设计文档 Assets - 角色,动作,模型和音效等 Source - 代码 ...
- 2014年spark开发人员大赛火热进行中!
"发现最有正能量的网络达人".Spark开发人员大赛火热进行! watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3d0dHoxOTc0/ ...
- python处理时间戳
代码如下: def timestamp_datetime(value): format = '%Y-%m-%d %H:%M:%S' # value为传入的值为时间戳(整形),如:133 ...
- 0x13 链表与邻接表
这东西我还是有点会玩的啊.. 邻值查找这东西不就是维护个前驱后继嘛.. #include<cstdio> #include<iostream> #include<cstr ...
- poj--1236--Network of Schools(scc+缩点)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14062 Accepted: 56 ...
- maven的pom.xml配置标签
转自:https://blog.csdn.net/wf787283810/article/details/76188595 <project xmlns="http://maven.a ...