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相关推荐

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

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

  2. P3387 【模板】缩点 洛谷 java题解 连通图+拓扑排序

    传送门: P3387 [模板]缩点 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P3387 问题分析 首先为了节省 ...

  3. 洛谷P3387 【模板】缩点 题解

    题目来源: https://www.luogu.org/problemnew/show/P3387 题目描述: 题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径 ...

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

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

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

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

  6. [洛谷P3387]【模板】缩点

    题目大意:给定一个$n$个点$m$条边有向图,第$i$个点有权值$w_i$,求一条路径,使路径经过的点权值之和最大,输出点权和,(多次经过一个点只算一次点权) 题解:$tarjan$缩点+$DP$ 卡 ...

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

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

  8. 洛谷 P3387 【模板】缩点

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

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

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

  10. 洛谷—P3387 【模板】缩点

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

最新文章

  1. hexo使用jenkins自动部署到阿里云
  2. 重磅!SCI顶级牛刊《Science》合集(2018~2020年度)
  3. boost::make_maximal_planar用法的测试程序
  4. C++Doubly Linked List双向链表(附完整源码)
  5. C4.5-Release8的代码架构图
  6. 乐高计算机发展史教程,【乐高产品发展史特别篇】乐高恐龙发展史
  7. 新手与大佬学习方式的差异
  8. 如何实现分布式 java_Redis中是如何实现分布式锁的?
  9. 对Moss 2007中访问群体的设置和使用补充
  10. 【论文解读】LGN: 基于词典构建的中文NER图神经网络
  11. 关于treeview中的checkbox的全选问题
  12. 雨课堂《工程伦理》期末考试答案
  13. 数据库 - 数据字典及其使用
  14. 【张朝阳的物理课笔记】 1. 力,牛顿定律,飞船角速度
  15. tungsten replicator oracle,Tungsten Replicator 实验
  16. 教ai玩游戏_简单解释:DeepMind如何教AI玩视频游戏
  17. 一键重装系统win7旗舰版系统教程
  18. Leaf-美团分布式ID生成服务
  19. 关于ajax的,关于AJAX
  20. 电脑扩展屏幕后图标都跑到副屏(扩展屏)的解决办法

热门文章

  1. 突发!四川长宁发生6.0级地震
  2. 90后IT男被准丈母娘拒绝:家境不重要,重要的是…戳中痛处
  3. IIS7里的appcmd命令
  4. jquery知识点总结(转载)
  5. centos 打包RPM包 ntopng
  6. 通用窗口类 Inventory Pro 2.1.2 Demo1(上)
  7. iOS端im实时音视频功能快速开发实操指导!
  8. 关于百度地图根据经纬度获取城市信息的接口
  9. Linux下PHP5.5编译参数详解
  10. 【转】浅论ViewState及其与Session的关系