洛谷-3387 【模板】缩点
题目描述
给定一个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 【模板】缩点相关推荐
- 洛谷3387 模板 缩点
题目:缩点 思路:tarjan缩点+最长路. 注意: 1.用dijkstra求最长路时,优先队列中的<运算符要反过来. 2.需要把所有入度为0的点为起点跑一遍最长路. 3.每次求最长路时,dis ...
- 专题·树链剖分【including 洛谷·【模板】树链剖分
初见安~~~终于学会了树剖~~~ [兴奋]当初机房的大佬在学树剖的时候我反复强调过:"学树剖没有前途的!!!" 恩.真香. 一.重链与重儿子 所谓树剖--树链剖分,就是赋予一个链的 ...
- 洛谷·【模板】点分树 | 震波【including 点分树
初见安-这里是传送门:洛谷P6329 [模板]点分树 | 震波 一.点分树 其实你会点分治的话,点分树就是把点分治时的重心提出来重新连城一棵树. 比如当前点是u,求出子树v的重心root后将root与 ...
- 强连通分量:洛谷P3387 模板:缩点
传送门 顾名思义,模板awa #include <cstdio> #include <cstring> #include <cmath> #include < ...
- 洛谷.4897.[模板]最小割树(Dinic)
题目链接 最小割树模板.具体见:https://www.cnblogs.com/SovietPower/p/9734013.html. ISAP不知为啥T成0分了.. Dinic: //1566ms ...
- 【后缀数组】洛谷P3809模板题
题目背景 这是一道模板题. 题目描述 读入一个长度为 n n n 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置. ...
- 洛谷 P1919 模板】A*B Problem升级版(FFT快速傅里叶)
https://www.luogu.com.cn/problem/P1919 题目背景 本题数据已加强,请使用 FFT/NTT,不要再交 Python 代码浪费评测资源. 题目描述 给你两个正整数 a ...
- 洛谷 P3387(缩点后+处理 )
题目链接:https://www.luogu.com.cn/problem/P3387 分析: 我们需要找出一条点权最大的路径. 不限制点的个数,那么对于一个环上的点被选择了,一整条环都应该被选择. ...
- 洛谷 2341 tarjan缩点
题目传送门:https://www.luogu.org/problemnew/show/P2341#sub 这道题有一个想法很重要,就是成为超级明星的奶牛所在的强连通分量出度为0,假如出度不为0,而他 ...
最新文章
- 该文件 linux命令,Linux网络系统,如果执行行命令#chmod 746 file.txt,那么该文件的权限是?...
- 关于 Rocksdb 性能分析 需要知道的一些“小技巧“ -- perf_context的“内功” ,systemtap、perf、 ftrace的颜值
- 北京大学年度人物揭榜!发论文、搞科研,看“学神打架”!
- 天玑机器人颈椎_烟台一女子车祸致颈椎重度骨折 骨科机器人助力救治
- ML之预测:玩转2018世界杯—采用机器学习预测小组赛、十六比赛、四决赛、半决赛、决赛以及世界杯总冠军的各个队伍
- docker下MySQL修改配置并重启生效:表名不区分大小写
- Android TextWatcher监控EditText中的输入内容并限制其输入字符个数
- 【tenserflow】——数据类型以及常用属性
- 【R】语言第二课----- 变量的使用方法
- 【es】ClassNotFoundException: org.elasticsearch.plugins.ExtendedPluginsClassLoader
- 用于语音识别的数据增强
- 怎样确定远程计算机ip地址,如何获取远程计算机的IP地址
- 单片机c语言轻松入门 pdf,单片机系统C语言轻松入门.pdf
- 云播 Android,云播放(Air Playit)android版
- Java Web(九) 用户管理系统
- 有道智云OCR图片识别文字+返回数据处理技巧(实现语言-按键精灵脚本请求识别+java服务端处理数据)...
- Linux 关闭 开启防火墙命令
- 如何提高阅读源代码能力
- Java校验手机号格式
- 为什么使用html5播放器电脑会卡顿,电脑看视频卡顿是什么原因_电脑播放视频卡顿的处理办法-系统城...