【缩点】洛谷P3387
SPFA的tarjan缩点 是真的慢很多 但是也是真的很好理解
#include<iostream> #include<cstdio> #include<algorithm> #include<queue> #include<cstring> using namespace std; const int maxn=100010; bool vis[maxn]; int n,m,ans=0,cnt=0,tot=0,top=0,num=0; int u[maxn],v[maxn],head[maxn],low[maxn],dfn[maxn]; int dis[maxn],Dis[maxn],stack[maxn],po[maxn],a[maxn]; struct Edge{int next,to; }cute[maxn];void build(int x,int y) {cute[++tot].next=head[x];cute[tot].to=y;head[x]=tot; } void tarjan(int x) {dfn[x]=low[x]=++num;stack[++top]=x;vis[x]=true;for(int i=head[x];i;i=cute[i].next){int y=cute[i].to;if(vis[y]) low[x]=min(low[x],dfn[y]);else if(!dfn[y]) tarjan(y),low[x]=min(low[x],low[y]);}if(low[x]==dfn[x]){vis[x]=false;cnt++;while(stack[top+1]!=x){po[stack[top]]=cnt;vis[stack[top]]=false;Dis[cnt]+=a[stack[top]];top--;}} }void Spfa(int x) {memset(vis,0,sizeof(vis));memset(dis,0,sizeof(dis));dis[x]=Dis[x];queue<int> q;vis[x]=true;q.push(x);while(!q.empty()){int u=q.front();vis[u]=false;q.pop();for(int i=head[u];i;i=cute[i].next){int v=cute[i].to;if(dis[v]<dis[u]+Dis[v]){dis[v]=dis[u]+Dis[v];if(!vis[v]){vis[v]=true;q.push(v); }}}}for(int i=1;i<=n;i++) ans=max(ans,dis[i]); }int main() {scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)scanf("%d",&a[i]);for(int i=1;i<=m;i++){scanf("%d%d",&u[i],&v[i]);build(u[i],v[i]);//有向图 建一次边}for(int i=1;i<=n;i++)if(!dfn[i]) tarjan(i);memset(head,0,sizeof(head));memset(cute,0,sizeof(cute));for(int i=1;i<=m;i++)if(po[u[i]]!=po[v[i]]) build(po[u[i]],po[v[i]]);for(int i=1;i<=n;i++) Spfa(i);printf("%d",ans);return 0; }
转载于:https://www.cnblogs.com/Koiny/p/9879829.html
【缩点】洛谷P3387相关推荐
- (Tarjan)洛谷P3387【模板】缩点
洛谷P3387[模板]缩点 思路: 虽然是缩点模板题,但是明显感觉比同一个题单中的其他题都难. 题目思路已经提供给你:Tarjan缩点+DAGdp.就是用Tarjan缩点,重新建图之后,边拓扑排序边建 ...
- P3387 【模板】缩点 洛谷 java题解 连通图+拓扑排序
传送门: P3387 [模板]缩点 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P3387 问题分析 首先为了节省 ...
- 洛谷P3387 【模板】缩点 题解
题目来源: https://www.luogu.org/problemnew/show/P3387 题目描述: 题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径 ...
- 洛谷 P3387(缩点后+处理 )
题目链接:https://www.luogu.com.cn/problem/P3387 分析: 我们需要找出一条点权最大的路径. 不限制点的个数,那么对于一个环上的点被选择了,一整条环都应该被选择. ...
- 洛谷 P3387 【模板】缩点 tarjan 虚拟头节点和虚拟尾节点
题目链接: https://www.luogu.org/problem/P3387 一:ac思路 参考博客: https://www.luogu.org/blog/wyz598085788/solut ...
- [洛谷P3387]【模板】缩点
题目大意:给定一个$n$个点$m$条边有向图,第$i$个点有权值$w_i$,求一条路径,使路径经过的点权值之和最大,输出点权和,(多次经过一个点只算一次点权) 题解:$tarjan$缩点+$DP$ 卡 ...
- 强连通分量:洛谷P3387 模板:缩点
传送门 顾名思义,模板awa #include <cstdio> #include <cstring> #include <cmath> #include < ...
- 洛谷 P3387 【模板】缩点
题目 题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点, ...
- 洛谷P3387 【模板】缩点(tarjan)
题目链接:https://www.luogu.org/problemnew/show/P3387 题目大意: 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只 ...
- 洛谷—P3387 【模板】缩点
题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只 ...
最新文章
- hexo使用jenkins自动部署到阿里云
- 重磅!SCI顶级牛刊《Science》合集(2018~2020年度)
- boost::make_maximal_planar用法的测试程序
- C++Doubly Linked List双向链表(附完整源码)
- C4.5-Release8的代码架构图
- 乐高计算机发展史教程,【乐高产品发展史特别篇】乐高恐龙发展史
- 新手与大佬学习方式的差异
- 如何实现分布式 java_Redis中是如何实现分布式锁的?
- 对Moss 2007中访问群体的设置和使用补充
- 【论文解读】LGN: 基于词典构建的中文NER图神经网络
- 关于treeview中的checkbox的全选问题
- 雨课堂《工程伦理》期末考试答案
- 数据库 - 数据字典及其使用
- 【张朝阳的物理课笔记】 1. 力,牛顿定律,飞船角速度
- tungsten replicator oracle,Tungsten Replicator 实验
- 教ai玩游戏_简单解释:DeepMind如何教AI玩视频游戏
- 一键重装系统win7旗舰版系统教程
- Leaf-美团分布式ID生成服务
- 关于ajax的,关于AJAX
- 电脑扩展屏幕后图标都跑到副屏(扩展屏)的解决办法