P3387-【模板】缩点【tarjan,强联通分量,DAGdp】

正题

评测记录:
https://www.luogu.org/recordnew/lists?uid=52918&pid=P3387


大意

一个有向图。每个点有权值,但每个值只能取一次,每条边可以重复走,求一条路径使值最大。


解题思路

用tarjan求出每一个强联通分量,然后将每个强联通分量缩成一个点,这样这个图就变成了一个有向无环图,然后就可以按广度优先遍历进行dp了。


代码

#include<cstdio>
#include<stack>
#include<queue>
#include<cstring>
#define N 10000
#define M 100000
using namespace std;
stack<int> Stack;
queue<int> q;
struct line{int to,from,next;
}a[M];
int n,m,x,y,tot,in[N],ls[N],fl[N],cost[N],f[N],maxs,low[N],dfn[N],top,num,gt[N],an[N];
bool ins[N],v[N];
void addl(int x,int y,int tot)
{a[tot].to=y;a[tot].from=x;a[tot].next=ls[x];ls[x]=tot;
}
void tarjan(int x)
{ins[x]=true;dfn[x]=low[x]=++top;Stack.push(x);for (int i=ls[x];i;i=a[i].next)if (!dfn[a[i].to]){tarjan(a[i].to);low[x]=min(low[x],low[a[i].to]);}else if (ins[a[i].to])low[x]=min(low[x],dfn[a[i].to]);if (low[x]==dfn[x]){while (Stack.top()!=x){int y=Stack.top();fl[y]=x;an[x]+=cost[y];//计算强联通权值和Stack.pop();ins[y]=0;}fl[x]=x;an[x]+=cost[x];//计算强联通权值和ins[x]=0;Stack.pop();}
}
void bfs()
{while (!q.empty()){int x=q.front();q.pop();for (int i=ls[x];i;i=a[i].next){int y=a[i].to;f[y]=max(f[y],f[x]+an[y]);//dpmaxs=max(maxs,f[y]);//求最大值if (!v[y]){q.push(y);v[y]=false;}}}
}
int main()
{scanf("%d%d",&n,&m);for (int i=1;i<=n;i++) scanf("%d",&cost[i]);for (int i=1;i<=m;i++){scanf("%d%d",&x,&y);addl(x,y,i);//加边}for (int i=1;i<=n;i++)if (!dfn[i])tarjan(i);//求强联通memset(ls,0,sizeof(ls));//去除所有的边的连通(保留值的)for (int i=1;i<=m;i++){x=a[i].from;y=a[i].to;if (fl[x]!=fl[y])//不在强联通中{tot++;addl(fl[x],fl[y],tot);//连边in[fl[y]]++;//统计入度}}for (int i=1;i<=n;i++)if (fl[i]==i&&!in[i])//加入队列{q.push(i);v[i]=true;f[i]=an[i];maxs=max(maxs,f[i]);}bfs();printf("%d",maxs);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Orleans简单配置

话说曾几何时,我第一次看到xml文件,心中闪过一念想:"这<>是什么鬼?"…用ini或者json多简单易懂,现在发觉作为配置文件,json有赶超xml的趋势.不过xml用多了,也觉得顺眼多了.不觉得<>难看了,反而它能折叠让我觉得组织起来也更方便了.这说明一个道理:不是你…

say小组KTV点歌系统简介

指导老师&#xff1a;穆老师 班主任&#xff1a;佟老师小组成员&#xff1a;组长&#xff1a;焦文宇 组员&#xff1a;窦倩 王晓凤 巩固 石虹蔓 田锋目录&#xff1a;1.首页 2.项目前台 3..项目后台总结&#xff1a;从5月25号开始的到6月10号结束&#xff0c;这期间我们遇…

Java虚拟机必学之四大知识要点,附学习资料

转载自 Java虚拟机必学之四大知识要点&#xff0c;附学习资料 作为一位 Java 程序员&#xff0c;在尽情享受 Java 虚拟机带来好处的同时&#xff0c;我们还应该去了解和思考“这些技术特性是如何实现的”&#xff0c;去了解最底层的原理。只有熟悉 JVM&#xff0c;你才能在遇…

RabbitMQ消息可靠性 (投递+消费)

文章目录Rabbitmq的消息可靠性投递Rabbitmq的消息可靠性投递confirmCallbackRabbitmq的消息可靠性投递returnCallbackRabbitmq的消息确机制ACKRabbitmq的消息可靠性投递 什么是消息的可靠性投递 保证消息百分百发送到消息队列中去 1 保证mq节点成功接受消息&#xff0c;消息发…

jzoj4024-石子游戏【SG函数,博弈论】

正题 大意 有n堆石头&#xff0c;每堆石头有aiai个每次可以拿走一堆或者Y个&#xff08;仅当gcd(Y,ai)1gcd(Y,ai)1&#xff09;。拿走最后一堆石头的人就赢了&#xff0c;两个人都是聪明绝顶的。 解题思路 考虑构建SG函数&#xff1a; SG(x)mex(SG(x−y)(gcd(x,y)1) υ …

程序配置amp;amp;ConfigurationManager

配置组件是.net framework中非常常用的功能。在创建.net framework 工程时&#xff0c;系统不仅会自动生成app.config文件&#xff0c;而且还提供了非常强大的访问类库。但是这些好东西&#xff0c;在.net core 2.0中已经不复存在&#xff0c;至少说没有.net framework 中那么完…

既然参与,那就做好,我相信我们是最棒的!!!

‍‍大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。今天是3班的KTV项目答辩&#xff0c;也是20级的最后一个班级&#xff0c;连续6天的KTV项目答辩终于告一段落。回顾各班所做的项目&#xff0c;通过我自己参与点评的以及从班内参观同学…

又发生频繁FGC,这次是谁的锅

转载自 又发生频繁FGC&#xff0c;这次是谁的锅 这是笨神JVMPocket群里一位名为"云何*住"的同学提出来的问题&#xff0c;问题现象是CPU飙高并且频繁FullGC。 重现问题 这位同学的业务代码比较复杂&#xff0c;为了简化业务场景&#xff0c;笔者将其代码压缩成如…

jzoj4025-找回密码【后缀自动机】

正题 大意 一个字符串&#xff0c;要求第k小的子串。 解题思路 先建立一个后缀自动机&#xff0c;然后用一个numinum_inumi​表示第iii个节点的可以到达的点所表示的子串总和&#xff0c;然后从第1号点开始查找&#xff0c;判断一下找到第k小所在的节点后&#xff0c;然后查找…

三个剩两个,两个剩一个,最后一个都没剩下。

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。今天文章的标题本来是&#xff1a;“从未见过如此不要脸耍无赖的人&#xff01;&#xff01;&#xff01;”&#xff0c;后来想了想&#xff0c;毕竟公众号里面还有那么多不同身份的粉丝&a…

算法面试,如何在100 亿URL中判断某个URL是否存在

转载自 算法面试&#xff0c;如何在100 亿URL中判断某个URL是否存在 如果面试官问你&#xff0c;一个网站有 100 亿 url 存在一个黑名单中&#xff0c;每条 url 平均 64 字节。问这个黑名单要怎么存&#xff1f;若此时随便输入一个 url&#xff0c;如何判断该 url 是否在这个…

链表 题

文章目录找出链表中类中点的位置判断该链表是否为回文结构将单向链表按某值划分成左边小、中间相等、右边大的形式给定一个有next指针和rand指针的Node 组成的无环单链表头节点&#xff0c;实现一个函数完成链表的复制&#xff0c;返回新链表的头节点给定两个可能有环也可能无环…

.NET Core 2.0迁移技巧之web.config配置文件

大家都知道.NET Core现在不再支持原来的web.config配置文件了&#xff0c;取而代之的是json或xml配置文件。官方推荐的项目配置方式是使用appsettings.json配置文件&#xff0c;这对现有一些重度使用web.cofig配置的项目迁移可能是不可接受的。 但是好消息是&#xff0c;我们是…

jzoj2136-(GDKOI2004)汉诺塔【找规律,模拟】

正题 大意 将汉诺塔的规则改为只能移动到相邻的柱子&#xff0c;然后求有n个圆盘时在第m步时每个盘所在的位置。 解题思路 我们先将3个盘的移动情况推出来&#xff1a;(1,1,1)->(2,1,1)->(3,1,1)->(3,2,1)->(2,2,1)->(1,2,1)->(1,3,1)->(2,3,1)->(3,…

学会它,可以替你写100行 200行 300行……的代码

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。今天&#xff0c;给大家分享一个非常非常使用的小技巧&#xff0c;那就是&#xff1a;“在webstrom中创建一个简单的vue模板”&#xff0c;根据这个方法&#xff0c;你可以任意的创建html模…

Java中随机数的原理,以及使用时的注意点

转载自 Java中随机数的原理&#xff0c;以及使用时的注意点 1 前言 一提到 Java 中的随机数&#xff0c;很多人就会想到 Random&#xff0c;当出现生成随机数这样需求时&#xff0c;大多数人都会选择使用 Random 来生成随机数。Random 类是线程安全的&#xff0c;但其内部使…

MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例

dotnet core 2.0 发布已经好几天了&#xff0c;期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0&#xff0c;升级过程还是比较顺利的&#xff0c;变动也不是太多。升级的过程中也少不了 Entity Framwork Core 的升级&#xff0c;在这篇文章中主要介绍下 MySql 数据库使用…

下午带着几个同学打了两节课的牌~

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。大赛的项目目前正在火热进行中&#xff0c;靳天宇小组做的是扑克牌的游戏&#xff0c;除了要做大家耳熟能详的“斗地主”之外&#xff0c;另外在我的建议下准备再加两种玩法&#xff0c;一…

Java 0xffffffff隐式类型转换的坑

一、场景复现 项目需求&#xff0c;long的低32位存储ip地址&#xff0c;需要将ip信息展示成为字符串ip。 public static void main(String[] args){long ipLong 0x457145130A1901F6L;String ip longToIp(ipLong&0xffffffff);//取低32位System.out.println(ipLong);Syst…

jzoj2137-(GDKOI2004)城市统计【二维前缀和,bfs】

正题 大意 有n*n的矩阵&#xff0c;有居民区有商业区&#xff0c;每个居民区曼哈顿距离最近的商业区的曼哈顿距离就是那个居民区离商业区的距离。每个格子统计一下以它为中心的2∗r12∗r12∗r12∗r1的矩阵内所有居民区离商业区的距离的和。 解题思路 先bfs计算所有居民离商业…