洛谷P3119

省选难度啊啊啊
经评论区的朋友提醒,代码已订正
先说一下该题思路:
首先,这题并非是求最短路,而是求最长路(最长路常用算法一般是拓扑排序,而我这个蒟蒻还没有学会QAQ)
但是这一题既然标签是连通图,那么肯定要用tarjan,考虑到缩点之后每个缩点都具有一定数量的点数,然后如果我们进入了这个缩点,那么我们可以从进入该缩点的点起,然后将整个缩点中的点全部遍历一遍,所以我们可以将缩点中的点数作为边的权值(既然有权值那么我们就可以跑spfa),进行缩点之后就可以重新建图,所以在这里我们有三个first,nxt,v,然后我们要跑两边spfa,所以我们要有两个dis数组来保存正向和逆向的距离,然后只需要枚举每个点,同时用最大值来更新ans

#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
#include<queue>
using namespace std;
const int maxn=100003;
stack<int> s;
queue<int> q;
int tot,tot1,tot2;
int v[maxn],v1[maxn],v2[maxn];
int nxt[maxn],nxt1[maxn],nxt2[maxn];
int first[maxn],f1[maxn],f2[maxn];
int ins[maxn],dfn[maxn],low[maxn];
int c[maxn],cnt[maxn],use[maxn];
int dis1[maxn],dis2[maxn];
int timing,col;
void add(int x,int y)
{v[tot]=y;nxt[tot]=first[x];first[x]=tot++;
}
void add1(int x,int y)
{v1[tot1]=y;nxt1[tot1]=f1[x];f1[x]=tot1++;
}
void add2(int x,int y)
{v2[tot2]=y;nxt2[tot2]=f2[x];f2[x]=tot2++;
}
void tarjan(int x)
{ins[x]=1;s.push(x);dfn[x]=low[x]=++timing;for(int to=first[x];to!=-1;to=nxt[to]){if(!dfn[v[to]]){tarjan(v[to]);low[x]=min(low[x],low[v[to]]);}else if(ins[v[to]])low[x]=min(low[x],low[v[to]]);}if(dfn[x]==low[x]){col++;int k;do{k=s.top();ins[k]=0;c[k]=col;cnt[col]++;s.pop();} while (k!=x);}
}
void spfa1(int x)
{dis1[x]=cnt[x];q.push(x);while(!q.empty()){int k=q.front();q.pop();for(int to=f1[k];to!=-1;to=nxt1[to]){if(dis1[v1[to]]<dis1[k]+cnt[v1[to]])dis1[v1[to]]=dis1[k]+cnt[v1[to]];if(!ins[v1[to]]){q.push(v1[to]);ins[v1[to]]=1;}}ins[k]=0;}
}
void spfa2(int x)
{dis2[x]=cnt[x];q.push(x);while(!q.empty()){int k=q.front();q.pop();for(int to=f2[k];to!=-1;to=nxt2[to]){if(dis2[v2[to]]<dis2[k]+cnt[v2[to]])dis2[v2[to]]=dis2[k]+cnt[v2[to]];if(!ins[v2[to]]){q.push(v2[to]);ins[v2[to]]=1;}}ins[k]=0;}
}
int main()
{int n,m,a,b,start;cin>>n>>m;memset(first,-1,sizeof(first));memset(f1,-1,sizeof(f1));memset(f2,-1,sizeof(f2));for(int k=0;k<m;k++){scanf("%d%d",&a,&b);add(a,b);}for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);start=c[1];for(int i=1;i<=n;i++)for(int to=first[i];to!=-1;to=nxt[to])if(c[i]!=c[v[to]]){add1(c[i],c[v[to]]);add2(c[v[to]],c[i]);}spfa1(start);spfa2(start);int ans=cnt[start];for(int i=1;i<=n;i++)if(!use[c[i]] && dis1[c[i]]){use[c[i]]=1;for(int to=f2[c[i]];to!=-1;to=nxt2[to]){if(!dis2[v2[to]])continue;ans=max(dis1[c[i]]+dis2[v2[to]]-cnt[start],ans);}}cout<<ans;return 0;
}

好像说了这么久,应该只有我自己一个人懂吧233333

另一个神犇的分层法暂时还没懂23333

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

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

相关文章

android 组件化_Android 组件化路由框架设计(仿Arouter)

前言在组件化开发中一个必须要面对的问题就是组件间页面跳转&#xff0c;实现的方法有很多&#xff0c;简单的可以通过反射获取&#xff0c;但是比较耗费性能&#xff0c;也可以通过隐式跳转&#xff0c;但是随着页面的增多&#xff0c;过滤条件会随之增多&#xff0c;后期维护…

1668智能下数教程视频_你需要的教程合集更新

最近又收集了一波网络安全资源&#xff0c;在文章最底部。花了将近一天时间整理&#xff0c;只求各位小哥哥能点个在看&#xff0c;分享给身边的朋友。网络安全 --职业发展(渗透的最底部)2019网络安全初识与职业发展https://pan.baidu.com/s/1CAzO8IWxzBj-bOZlJ2eFVg 提取码&am…

关于java中nextline读取空白行的问题

最近在做java作业, 发现了一个问题, 就是nextline其实会接收缓冲区的\r, 使得在程序运行时nextline像是跳过了一样, 其实不然, 它只是读取了上一个enter时的\r, 如我的如下功能代码 public void run() {Scanner scan new Scanner(System.in);int ord, book_order;int flag 0;…

python汉字长度_行中字符串的长度(Python)

我正在尝试将一个.txt文件导入到一些专有软件中&#xff0c;但似乎不断收到一个错误。txt文件的大小几乎是2GB&#xff0c;大约有5600万行。 与制造商交谈后&#xff0c;他们说其中一条线路可能有错误。每一行应该包含一个MD5哈希值&#xff08;32个字符&#xff09;&#xff0…

pilz pnoz s4说明书_如何使用Pilz的安全继电器PNOZ S4?

前面的文章我们曾介绍过皮尔磁(Pilz)的安全继电器PNOZ X3和X2.7P/2.8P &#xff0c;(参考&#xff1a;如何使用Pilz的安全继电器PNOZ X2.7P/X2.8P&#xff1f;)今天这篇文章&#xff0c;我们来介绍另外一款安全继电器产品PNOZ s4.PNOZ s4可以用于急停按钮、安全门、安全开关等场…

推荐系统——协同过滤

协同过滤 协同过滤算法一般是通过用户之前的喜好或者相似的用户的喜好来推荐商品 基于领域的协同过滤算法一般有两种算法&#xff1a; 基于用户的协同过滤算法(UserCF):基于与用户相似用户的喜好进行推荐基于物品的协同过滤算法(ItemCF):基于用户喜好的物品寻找相似的物品进…

apriori算法代码_sklearn(九)apriori 关联规则算法,以及FP-growth 算法

是什么&#xff1a;apriori算法是第一个关联规则挖掘算法&#xff0c;利用逐层搜索的迭代方法找出数据库中的项集&#xff08;项的集合&#xff09;的关系&#xff0c;以形成规则&#xff0c;其过程由连接&#xff08;类矩阵运算&#xff09;与剪枝&#xff08;去掉没必要的中间…

电感检测_几种常用的电流检测方式

RT1720 是一款最高输入电压可达 80V、输出电压可达 60V 的热插拔控制器&#xff0c;它的作用是防止系统受到过高电压和负电压的攻击&#xff0c;同时还能防范过电流可能导致的问题&#xff0c;它的一种应用电路大致如下图所示&#xff1a;为了检测负载电流的大小&#xff0c;RS…

推荐系统——矩阵分解FM

矩阵分解 隐语义模型与矩阵分解 之所以我们提出隐语义模型与矩阵分解&#xff0c;原因就是[[协同过滤]]存在泛化能力弱的问题 而对于隐语义模型而言&#xff0c;我们可以利用隐向量来代表隐藏信息 此外&#xff0c;也可以在一定程度上弥补[[协同过滤]]处理稀疏矩阵能力不足的…

python wait_Python的等效Java函数wait(),notify(),synchronized

我必须在Python 2.7中编写一个类,我有一些问题. 我最近来自java背景和学习python 如果我必须在java中做,我会写这些 public class CommandSender extends Thread { private boolean isTimeOut; private boolean running; private ArrayList 我现在做了什么 class CommandSender…

千位分隔符的完整攻略

千位分隔符[1]是很常见的需求&#xff0c;但是输入文本千变万化&#xff0c;如何才能准确添加千分符呢&#xff1f; 纯整数情况 纯整数大概是所有情况里最简单的一种&#xff0c;我们只要正确匹配出千分位就好了。 观察上面的数字&#xff0c;我们可以得出千分位的特征是到字符…

限制按钮点击_Android | 使用 AspectJ 限制按钮快速点击

前言在Android开发中&#xff0c;限制按钮快速点击&#xff08;按钮防抖&#xff09;是一个常见的需求&#xff1b;在这篇文章里&#xff0c;我将介绍一种使用AspectJ的方法&#xff0c;基于注解处理器 & 运行时注解反射的原理。如果能帮上忙&#xff0c;请务必点赞加关注&…

svn不知道这样的主机 怎么解决_家里装修不知道怎么配置净水器,这几招教你轻松解决...

为了保障家庭饮水健康&#xff0c;很多业主都会选择在家中安装一台厨下净水器。但是&#xff0c;如若仅靠它来满足全家人日常洗漱&#xff0c;沐浴和饮用&#xff0c;这势必会极大地影响到全家人的生活品质。这个时候&#xff0c;实阳机电良心建议&#xff0c;全屋净水系统&…

推荐系统——Wide Deep

[[点击率]]预估介绍 点击率预估是对每次广告点击情况作出预测&#xff0c;可以输出点击或者不点击&#xff0c;也可以输出该次点击的概率&#xff0c;后者有时候也称为pClick.对于点击率预估模型而言&#xff0c;其最终作用是输出点击的一个概率&#xff0c;是一个回归模型 可…

redis系列:通过文章点赞排名案例学习sortedset命令

前言 这一篇文章将讲述Redis中的sortedset类型命令&#xff0c;同样也是通过demo来讲述&#xff0c;其他部分这里就不在赘述了。 项目Github地址&#xff1a;https://github.com/rainbowda/learnWay/tree/master/learnRedis/case-sortedset 案例 demo功能是文章点赞排名等等&am…

xml生成2维码_MyBatis(2)之MyBatis-Generator最佳实践

自定义注释自定义注解指定xml文件模式上一篇文章详细阐述了xml配置文件的各种标签及其含义。其实从标签开始&#xff0c;每一个标签都对应一个实体类。context.class对应标签&#xff0c;而每一个子标签都对应一个属性&#xff1b;如图&#xff1a;标签与实体类的对应关系。有了…

nginx 配置详解_Nginx 配置详解

序言Nginx是lgor Sysoev为俄罗斯访问量第二的http://rambler.ru站点设计开发的。从2004年发布至今&#xff0c;凭借开源的力量&#xff0c;已经接近成熟与完善。Nginx功能丰富&#xff0c;可作为HTTP服务器&#xff0c;也可作为反向代理服务器&#xff0c;邮件服务器。支持Fast…

推荐系统——GBDT+LR

[[逻辑回归模型]] 逻辑回归是在[[线性回归]]的基础上添加了一个Sigmoid函数&#xff08;非线形&#xff09;映射&#xff0c;从而可以使逻辑回归成为一个优秀的分类算法 逻辑回归假设数据服从[[伯努利分布]]&#xff0c;通过[[极大化似然函数]]的方法&#xff0c;运用[[梯度下降…

从燃尽图看项目管理:你的项目哪里出错了?(燃尽图类型全解析)

什么是燃尽图 燃尽图&#xff08;burn down chart&#xff09;是在项目完成之前&#xff0c;对需要完成的工作任务的一种可视化表示。理想情况下&#xff0c;该图表是一个向下的曲线&#xff0c;随着项目任务的逐渐完成“烧尽”至零。 燃尽图常常用于敏捷开发中&#xff0c;作为…

springtboot 引用子工程的文件_xmake从入门到精通11:如何组织构建大型工程

xmake是一个基于Lua的轻量级现代化c/c的项目构建工具&#xff0c;主要特点是&#xff1a;语法简单易上手&#xff0c;提供更加可读的项目维护&#xff0c;实现跨平台行为一致的构建体验。本文主要详细讲解下&#xff0c;如何通过配置子工程模块&#xff0c;来组织构建一个大规模…