洛谷 P3387 【模板】缩点 (tarjan)
展开
题目背景
缩点+DP
题目描述
给定一个 nn 个点 mm 条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大。你只需要求出这个权值和。
允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次。
输入格式
第一行两个正整数 n,mn,m
第二行 nn 个整数,依次代表点权
第三至 m+2m+2 行,每行两个整数 u,vu,v,表示一条 u\rightarrow vu→v 的有向边。
输出格式
共一行,最大的点权之和。
输入输出样例
输入 #1 复制
2 2
1 1
1 2
2 1
输出 #1 复制
2
说明/提示
【数据范围】
对于 100%100% 的数据,1\le n \le 10^41≤n≤10
4
,1\le m \le 10^51≤m≤10
5
,点权 \in [0,1000]∈[0,1000]
算法:Tarjan 缩点 + DAGdp
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e4+10;
vector<int> g[N],t[N];
int n,m,a[N],b[N];
int dfn[N],low[N],num;
int in[N],s[N],top,cnt,c[N],vis[N];
void tarjan(int u)
{dfn[u]=low[u]=++num;s[++top]=u;in[u]=1;for(int i=0;i<g[u].size();i++){int v=g[u][i];if(!dfn[v]){tarjan(v);low[u]=min(low[u],low[v]); }else if(in[v])low[u]=min(low[u],dfn[v]);}if(dfn[u]==low[u]){cnt++;int v;do{v=s[top--];c[v]=cnt;in[v]=0;b[cnt]+=a[v]; }while(v!=u);}
}
void build()
{for(int i=1;i<=n;i++){for(int j=0;j<g[i].size();j++){int v=g[i][j];if(c[i]!=c[v]){t[c[i]].push_back(c[v]);}}}
}
int dfs(int u)
{vis[u]=1;int ans=b[u];for(int i=0;i<t[u].size();i++){ans=max(ans,b[u]+dfs(t[u][i]));}return ans;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}int x,y;for(int i=1;i<=m;i++){scanf("%d%d",&x,&y);g[x].push_back(y);}for(int i=1;i<=n;i++){if(!dfn[i]) tarjan(i);}build();int ans=0;for(int i=1;i<=n;i++){if(!vis[i]) ans=max(ans,dfs(i));}printf("%d",ans);return 0;}
洛谷 P3387 【模板】缩点 (tarjan)相关推荐
- 强连通分量:洛谷P3387 模板:缩点
传送门 顾名思义,模板awa #include <cstdio> #include <cstring> #include <cmath> #include < ...
- 洛谷 P3387(缩点后+处理 )
题目链接:https://www.luogu.com.cn/problem/P3387 分析: 我们需要找出一条点权最大的路径. 不限制点的个数,那么对于一个环上的点被选择了,一整条环都应该被选择. ...
- 洛谷3387 模板 缩点
题目:缩点 思路:tarjan缩点+最长路. 注意: 1.用dijkstra求最长路时,优先队列中的<运算符要反过来. 2.需要把所有入度为0的点为起点跑一遍最长路. 3.每次求最长路时,dis ...
- (Tarjan)洛谷P3387【模板】缩点
洛谷P3387[模板]缩点 思路: 虽然是缩点模板题,但是明显感觉比同一个题单中的其他题都难. 题目思路已经提供给你:Tarjan缩点+DAGdp.就是用Tarjan缩点,重新建图之后,边拓扑排序边建 ...
- 洛谷 2921 记忆化搜索 tarjan 基环外向树
洛谷 2921 记忆化搜索 tarjan 传送门 (https://www.luogu.org/problem/show?pid=2921) 做这题的经历有点玄学,,起因是某个random题的同学突然 ...
- 专题·树链剖分【including 洛谷·【模板】树链剖分
初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...
- 洛谷·【模板】点分树 | 震波【including 点分树
初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...
- 洛谷 P3387 【模板】缩点 tarjan 虚拟头节点和虚拟尾节点
题目链接: https://www.luogu.org/problem/P3387 一:ac思路 参考博客: https://www.luogu.org/blog/wyz598085788/solut ...
- 洛谷P3387 【模板】缩点(tarjan)
题目链接:https://www.luogu.org/problemnew/show/P3387 题目大意: 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只 ...
- 洛谷P3387 【模板】缩点 (tarjan算法)
输入: 2 2 1 1 1 2 2 1 输出: 2 解题思路:首先来说一下这个题为什么要缩点.题目中说会给定一个有向图,所以是 有可能会形成环的,又因为题目要我们求出路径上经过点的权值和最大,如果有环 ...
最新文章
- DrugVQA | 用视觉问答技术预测药物蛋白质相互作用
- 剑指offer 26:复杂链表的复制
- 马斯克说要开放自动驾驶和电池技术,上周被特斯拉起诉的公司已哭晕
- pythonctypes int数组调用dll
- 笔记-中项案例题-2019年下-人力资源管理和冲突管理
- 科大星云诗社动态20210501
- 开学几天了,还没有进入状态,继续努力
- css箭头超链接,css超链接
- cygwin下如何运行crontab定时脚本?
- Linux高级文本处理之sed(三)
- 鸿蒙手表升级计划,鸿蒙升级第一夜,服务器崩了!各机型升级排期表来了
- 【ETWVRP】基于matlab遗传算法求解带时间窗的含充电站车辆路径规划问题【含Matlab源码 1221期】
- 卫星地图破坏男女恋人之间的关系
- git添加对勾图标 TortoiseGit安转配置
- 无视硬件检测直接运行Win10混合现实门户
- Rainmeter音频频谱插件分享
- 洛谷P4147 玉蟾宫(单调栈解决)
- 执念斩长河22年寒假出发录
- 女人为什么喜欢抱着男人睡觉,一定…
- 2023年全国最新二级建造师精选真题及答案52