博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LA 4287 等价性证明
阅读量:6893 次
发布时间:2019-06-27

本文共 682 字,大约阅读时间需要 2 分钟。

题目链接:

 

题意是告诉你有n个命题,m条递推关系,表示某个命题可以推出另外一个命题。

现在问你至少在增加多少个递推关系可以保证所有命题两两互推。

 

把命题看成一个结点,推导看成有向边,就是n个结点,m 条有向边,要求添加尽量少的边,使得新图强连通。

 

首先找出强连通分量,把每个强连通分量缩成一个点,得到DAG。设有 a 个结点入度为 0 ,b 个结点出度为 0 ,max(a,b),就是答案。如下图:

 

入度为 0 的集合 为 1,出度为 0 的集合 为 2,要加两条红边才能 互相到达(强连通)。

先标记所有强连通图的入度出度 1 ,要是有点相同,标记为 0 ,统计 入度为 1 ,出度为 1 的个数。

如果原图只有一个强连通分量 ans = 0 不需要加边。

#include 
using namespace std;const int Maxn = 20000 + 10;vector
G[Maxn];int pre[Maxn];int lowlink[Maxn];int sccno[Maxn];int dfs_clock;int scc_cnt;stack
S;void dfs(int u){ pre[u] = lowlink[u] = ++dfs_clock; S.push(u); for(int i=0; i

 

转载于:https://www.cnblogs.com/TreeDream/p/6075869.html

你可能感兴趣的文章
Nginx内置变量以及日志格式变量参数详解
查看>>
Docker 命令
查看>>
如何在andorid native layer中加log function.【转】
查看>>
杂七杂八的文档资料。
查看>>
C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 访问频率限制功能实现、防止黑客扫描、防止恶意刷屏...
查看>>
如何在Hyper-V虚拟中安装Hyper-V角色
查看>>
通用XPE操作系统
查看>>
Opentracing Zipkin
查看>>
构建高可用服务器之四 Keepalive冗余Nginx
查看>>
android音频采集
查看>>
SHELL控制流结构笔记
查看>>
路由重分布新技术实现多种路由协议不同网络间通信案例实操应用
查看>>
打印机无法打印测试页
查看>>
【图文详解】Iptables
查看>>
Zabbix-web的中文显示及其乱码问题解决方法
查看>>
Gluster管理命令的总结与归纳
查看>>
FreeNAS如何配置LACP(链路聚合和故障)
查看>>
AJAX 学习笔记[三] get 与post 模式的区别
查看>>
MES技术
查看>>
GO语言练习:网络编程 ICMP 示例
查看>>