洛谷3387

 #include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=,maxm=;
int ans,n,m,etot,tot,top,color,last[maxn],w[maxn],f[maxn],val[maxn],dfn[maxn],low[maxn],col[maxn],st[maxn];
struct edge{int pre,to;}e[maxm];
struct rec{int x,y;}a[maxm];
void read(int &k){
k=; int f=; char c=getchar();
while(c<''||c>'')c=='-'&&(f=-),c=getchar();
while(''<=c&&c<='')k=k*+c-'',c=getchar();
k*=f;
}
int max(int a,int b){if (a>b) return a; return b;}
int min(int a,int b){if (a<b) return a; return b;}
void add(int x,int y){e[++etot]=(edge){last[x],y}; last[x]=etot;}
void tarjan(int x){
dfn[x]=low[x]=++tot; st[++top]=x;
for (int i=last[x],to;i;i=e[i].pre)
if (!dfn[to=e[i].to]) tarjan(to),low[x]=min(low[x],low[to]);
else if (!col[to]) low[x]=min(low[x],dfn[to]);
if (dfn[x]==low[x])
for(color++;st[top+]!=x;top--) col[st[top]]=color,val[color]+=w[st[top]];
}
void dfs(int x){
if (f[x]) return; f[x]=val[x]; int tmp=;
for (int i=last[x],to;i;i=e[i].pre) dfs(to=e[i].to),tmp=max(tmp,f[to]);
f[x]+=tmp;
}
int main(){
read(n); read(m);
for (int i=;i<=n;i++) read(w[i]);
for (int i=;i<=m;i++) read(a[i].x),read(a[i].y),add(a[i].x,a[i].y);
for (int i=;i<=n;i++) if (!dfn[i]) tarjan(i);
etot=; memset(last,,sizeof(last));
for (int i=,x,y;i<=m;i++) if(col[x=a[i].x]!=col[y=a[i].y]) add(col[x],col[y]);
for (int i=;i<=color;i++) dfs(i),ans=max(ans,f[i]);
return printf("%d\n",ans),;
}

【模板】Tarjan缩点的更多相关文章

  1. [模板]tarjan缩点+拓扑排序

    题目:给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次. 题目简述:先t ...

  2. 模板—tarjan缩点

    void tarjan(int x) { dfn[x]=++cnt;low[x]=cnt; vi[x]=; stack[++top]=x; for(rint i=f(x);i;i=n(i)) if(! ...

  3. 图论算法-Tarjan模板 【缩点;割顶;双连通分量】

    图论算法-Tarjan模板 [缩点:割顶:双连通分量] 为小伙伴们总结的Tarjan三大算法 Tarjan缩点(求强连通分量) int n; int low[100010],dfn[100010]; ...

  4. tarjan 缩点(模板)

    描述: 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 注:允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次. 思路: ...

  5. tarjan - SPFA - Luogu 3387【模板】缩点

    [模板]缩点 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次 ...

  6. P3387 【模板】缩点 tarjan

    虽说是模板题,但是竟然中间有dp的部分...先tarjan缩点,重新建图.然后记忆化搜索,搜索dag中的最小环. 题干: 题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值, ...

  7. tarjan缩点练习 洛谷P3387 【模板】缩点+poj 2186 Popular Cows

    缩点练习 洛谷 P3387 [模板]缩点 缩点 解题思路: 都说是模板了...先缩点把有环图转换成DAG 然后拓扑排序即可 #include <bits/stdc++.h> using n ...

  8. P3387 【模板】缩点 题解 (Tarjan)

    题目链接 P3387 [模板]缩点 解题思路 这几天搞图论,好有趣hhh,多写几篇博客. 上次学\(Tarjan\)求割点,这次缩点. 思路大概是多一个栈和染色的步骤,每次\(Tarjan\)的时候把 ...

  9. 【模板】缩点 tarjan+dp

    题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只 ...

  10. 洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码

    洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里 ...

随机推荐

  1. [水题]4242 果实计数&&3214 采访对象

    4242 果实计数  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 淘淘家有棵奇怪的苹果树,这棵树共有n+1层 ...

  2. 双logo

    from aip import AipSpeech bd_k_l = ['11059852', '5Kk01GtG2fjCwpzEkwdn0mjw', 'bp6Wyx377Elq7RsCQZzTBgG ...

  3. POJ 2610:Dog & Gopher

    Dog & Gopher Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4142   Accepted: 1747 ...

  4. 面向画布(Canvas)的JavaScript库

    面向画布(Canvas)的JavaScript库 总结 每个库各有特色,根据需求选择   学习要点 面向画布(Canvas)的JavaScript库 EaselJS 是一个封装了 HTML5 画布(C ...

  5. P3178 [HAOI2015]树上操作 树链剖分

    这个题就是一道树链剖分的裸题,但是需要有一个魔性操作___编号数组需要开longlong!!!震惊!真的神奇. 题干: 题目描述 有一棵点数为 N 的树,以点 为根,且树点有边权.然后有 M 个操作, ...

  6. bzoj2982 combination——卢卡斯定理

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2982 卢卡斯定理裸题: 原准备1A来着,结果输出忘了加回车! 预处理阶乘或者现求都可以,感觉 ...

  7. Behavior Designer扩展

    BehaviorManager.instance.Tick(behaviorTree); 卸载update里u3d直接卡死 = = SharedVariable直接赋值会改变他的引用关系,必须用XXX ...

  8. 湖南集训day8

    难度:☆☆☆☆☆☆☆ /* 可以先考虑一维,可知 模k意义下相同的前缀和任意两个相减都是k的倍数 问题等价于统计前缀何种模k相同的数的对数. 多维的时候二维前缀和,压行或者压列,n^3可以解决. */ ...

  9. P3187 [HNOI2007]最小矩形覆盖

    传送门 首先这个矩形的一条边肯定在凸包上.那么可以求出凸包然后枚举边,用类似旋转卡壳的方法求出另外三条边的位置,也就是求出以它为底最上面最右边最左边的点的位置.离它最远的点可以用叉积求,最左最右的可以 ...

  10. Appium + python - weixin公众号操作

    from appium import webdriverfrom time import sleep desired_caps = { "platformName":"A ...