题目描述
给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大。你只需要求出这个权值和。
允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次。
输入输出格式
输入格式:
第一行,n,m
第二行,n个整数,依次代表点权
第三至m+2行,每行两个整数u,v,表示u->v有一条有向边
输出格式:
共一行,最大的点权之和。

输入输出样例
输入样例#1:
2 2
1 1
1 2
2 1

输出样例#1:
2

说明
n<=104,m<=105,0<=点权<=1000
算法:Tarjan缩点+DAGdp

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int maxn = 1e5 + 1e4, maxm = 1e5 + 1e4;
int Index,pd[maxn],DFN[maxn],LOW[maxn];
int tot,color[maxn],sum[maxn],f[maxn];
int edge,fir[maxn],Next[maxm],to[maxm];
int sta[maxn],top; //手写栈
int n,m,val[maxn],x[maxm],y[maxm],ans;
void add(int x,int y){to[++edge]=y; Next[edge]=fir[x]; fir[x]=edge;
}
void tarjan(int x){sta[++top]=x;pd[x]=1;DFN[x]=LOW[x]= ++Index;for(int i=fir[x];i;i=Next[i]){int v=to[i];if(!DFN[v]){tarjan(v);LOW[x]=min(LOW[x],LOW[v]);}else if(pd[v]){LOW[x]=min(LOW[x],DFN[v]);}}if(DFN[x]==LOW[x]){tot++;while(sta[top+1]!=x){color[sta[top]]=tot;sum[tot]+=val[sta[top]];pd[sta[top--]]=0;}}
}
void search(int x){if(f[x]) return ;f[x]=sum[x];int maxsum = 0;for(int i=fir[x];i;i=Next[i]){if(!f[to[i]]) search(to[i]);maxsum=max(maxsum,f[to[i]]);}f[x]+=maxsum;
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++) scanf("%d",&val[i]);for(int i=1;i<=m;i++){scanf("%d",&x[i]);scanf("%d",&y[i]);add(x[i],y[i]);}for(int i=1;i<=n;i++) if(!DFN[i]) tarjan(i);memset(fir,0,sizeof(fir));memset(Next,0,sizeof(Next));memset(to,0,sizeof(to));edge=0;for(int i=1;i<=m;i++){if(color[x[i]]!=color[y[i]])add(color[x[i]],color[y[i]]);}for(int i=1;i<=tot;i++){if(!f[i]){search(i);ans=max(ans,f[i]);}}printf("%d",ans);return 0;
}

洛谷-3387 【模板】缩点相关推荐

  1. 洛谷3387 模板 缩点

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

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

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

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

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

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

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

  5. 洛谷.4897.[模板]最小割树(Dinic)

    题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...

  6. 【后缀数组】洛谷P3809模板题

    题目背景 这是一道模板题. 题目描述 读入一个长度为 n n n 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置. ...

  7. 洛谷 P1919 模板】A*B Problem升级版(FFT快速傅里叶)

    https://www.luogu.com.cn/problem/P1919 题目背景 本题数据已加强,请使用 FFT/NTT,不要再交 Python 代码浪费评测资源. 题目描述 给你两个正整数 a ...

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

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

  9. 洛谷 2341 tarjan缩点

    题目传送门:https://www.luogu.org/problemnew/show/P2341#sub 这道题有一个想法很重要,就是成为超级明星的奶牛所在的强连通分量出度为0,假如出度不为0,而他 ...

最新文章

  1. 该文件 linux命令,Linux网络系统,如果执行行命令#chmod 746 file.txt,那么该文件的权限是?...
  2. 关于 Rocksdb 性能分析 需要知道的一些“小技巧“ -- perf_context的“内功” ,systemtap、perf、 ftrace的颜值
  3. 北京大学年度人物揭榜!发论文、搞科研,看“学神打架”!
  4. 天玑机器人颈椎_烟台一女子车祸致颈椎重度骨折 骨科机器人助力救治
  5. ML之预测:玩转2018世界杯—采用机器学习预测小组赛、十六比赛、四决赛、半决赛、决赛以及世界杯总冠军的各个队伍
  6. docker下MySQL修改配置并重启生效:表名不区分大小写
  7. Android TextWatcher监控EditText中的输入内容并限制其输入字符个数
  8. 【tenserflow】——数据类型以及常用属性
  9. 【R】语言第二课----- 变量的使用方法
  10. 【es】ClassNotFoundException: org.elasticsearch.plugins.ExtendedPluginsClassLoader
  11. 用于语音识别的数据增强
  12. 怎样确定远程计算机ip地址,如何获取远程计算机的IP地址
  13. 单片机c语言轻松入门 pdf,单片机系统C语言轻松入门.pdf
  14. 云播 Android,云播放(Air Playit)android版
  15. Java Web(九) 用户管理系统
  16. 有道智云OCR图片识别文字+返回数据处理技巧(实现语言-按键精灵脚本请求识别+java服务端处理数据)...
  17. Linux 关闭 开启防火墙命令
  18. 如何提高阅读源代码能力
  19. Java校验手机号格式
  20. 为什么使用html5播放器电脑会卡顿,电脑看视频卡顿是什么原因_电脑播放视频卡顿的处理办法-系统城...

热门文章

  1. 【有利可图网】PS教程:把静态照片做成GIF放大动画效果
  2. 拉依达准则去除异常数据
  3. python使用pika订阅rabbitmq消息链接被重置问题
  4. 无社交,不创业:2017松松兄弟上海聚会剧透
  5. APP按下home键恢复到登录(主界面)
  6. 在浏览器中嵌入播放器
  7. SAP中通过格式调整解决导出EXCEL表字段显示不全问题
  8. 解决百度网盘下载慢限速问题(2019亲测可用)下载速度不要太爽了
  9. Latex参考文献问题---参考文献条数不显示
  10. KICAD设计——原理图层次及标签