展开
题目背景
缩点+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)相关推荐

  1. 强连通分量:洛谷P3387 模板:缩点

    传送门 顾名思义,模板awa #include <cstdio> #include <cstring> #include <cmath> #include < ...

  2. 洛谷 P3387(缩点后+处理 )

    题目链接:https://www.luogu.com.cn/problem/P3387 分析: 我们需要找出一条点权最大的路径. 不限制点的个数,那么对于一个环上的点被选择了,一整条环都应该被选择. ...

  3. 洛谷3387 模板 缩点

    题目:缩点 思路:tarjan缩点+最长路. 注意: 1.用dijkstra求最长路时,优先队列中的<运算符要反过来. 2.需要把所有入度为0的点为起点跑一遍最长路. 3.每次求最长路时,dis ...

  4. (Tarjan)洛谷P3387【模板】缩点

    洛谷P3387[模板]缩点 思路: 虽然是缩点模板题,但是明显感觉比同一个题单中的其他题都难. 题目思路已经提供给你:Tarjan缩点+DAGdp.就是用Tarjan缩点,重新建图之后,边拓扑排序边建 ...

  5. 洛谷 2921 记忆化搜索 tarjan 基环外向树

    洛谷 2921 记忆化搜索 tarjan 传送门 (https://www.luogu.org/problem/show?pid=2921) 做这题的经历有点玄学,,起因是某个random题的同学突然 ...

  6. 专题·树链剖分【including 洛谷·【模板】树链剖分

    初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...

  7. 洛谷·【模板】点分树 | 震波【including 点分树

    初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...

  8. 洛谷 P3387 【模板】缩点 tarjan 虚拟头节点和虚拟尾节点

    题目链接: https://www.luogu.org/problem/P3387 一:ac思路 参考博客: https://www.luogu.org/blog/wyz598085788/solut ...

  9. 洛谷P3387 【模板】缩点(tarjan)

    题目链接:https://www.luogu.org/problemnew/show/P3387 题目大意: 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只 ...

  10. 洛谷P3387 【模板】缩点 (tarjan算法)

    输入: 2 2 1 1 1 2 2 1 输出: 2 解题思路:首先来说一下这个题为什么要缩点.题目中说会给定一个有向图,所以是 有可能会形成环的,又因为题目要我们求出路径上经过点的权值和最大,如果有环 ...

最新文章

  1. DrugVQA | 用视觉问答技术预测药物蛋白质相互作用
  2. 剑指offer 26:复杂链表的复制
  3. 马斯克说要开放自动驾驶和电池技术,上周被特斯拉起诉的公司已哭晕
  4. pythonctypes int数组调用dll
  5. 笔记-中项案例题-2019年下-人力资源管理和冲突管理
  6. 科大星云诗社动态20210501
  7. 开学几天了,还没有进入状态,继续努力
  8. css箭头超链接,css超链接
  9. cygwin下如何运行crontab定时脚本?
  10. Linux高级文本处理之sed(三)
  11. 鸿蒙手表升级计划,鸿蒙升级第一夜,服务器崩了!各机型升级排期表来了
  12. 【ETWVRP】基于matlab遗传算法求解带时间窗的含充电站车辆路径规划问题【含Matlab源码 1221期】
  13. 卫星地图破坏男女恋人之间的关系
  14. git添加对勾图标 TortoiseGit安转配置
  15. 无视硬件检测直接运行Win10混合现实门户
  16. Rainmeter音频频谱插件分享
  17. 洛谷P4147 玉蟾宫(单调栈解决)
  18. 执念斩长河22年寒假出发录
  19. 女人为什么喜欢抱着男人睡觉,一定…
  20. 2023年全国最新二级建造师精选真题及答案52

热门文章

  1. 华为mate40功耗测试软件,华为mate40标准版评测_华为mate40标准版详细评测
  2. oracle 大会旧金山,甲骨文全球大会2013旧金山- In-Memory Option即将发布
  3. 吞噬还是撬动?开发者如何应对大模型风暴?
  4. 计算机网络与艺术的概述,《计算机网络在艺术设计中的应用》论文
  5. 阿里云服务器无法远程桌面连接
  6. 三大经济体年2018年末形势一览
  7. 关于微信小程序request请求fail不执行的问题
  8. P1346 电车(floyd)
  9. 时间管理:无压工作和轻松管理生活
  10. 近红外荧光ICG-whey protein 吲哚菁绿标记乳清蛋白