博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2014 Super Training #8 G Grouping --Tarjan求强连通分量
阅读量:4594 次
发布时间:2019-06-09

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

原题:ZOJ 3795 

题目大意:给定一个有向图,要求把点分为k个集合,使得每个集合中的任意两点a, b满足a, b互相不可到达。

分析:求出强连通分量后缩点,得到有向无环图,dfs该图求出各点深度(深度加权,权值为强连通分量大小),深度最大值即答案,

因为这一条路径上任意两点都可从深度小的一点到达深度大的一点,所以任意两点必定属于不同集合,即每个点一个集合;求的最大深度集合后,又可以把其它路径(长度为len)上的各点依次归到集合1..len。

代码:

#include 
#include
#include
#include
#include
#include
#include
#include
#define Mod 1000000009using namespace std;#define N 100007vector
G[N],G2[N];stack
stk;int instk[N],cnt,Time,n,m,dep[N];int low[N],dfn[N],bel[N],num[N];void tarjan(int u){ low[u] = dfn[u] = ++Time; stk.push(u); instk[u] = 1; for(int i=0;i
View Code

 

转载于:https://www.cnblogs.com/whatbeg/p/3827266.html

你可能感兴趣的文章
CCActionPageTurn3D
查看>>
python random
查看>>
esp32-智能语音-cli(调试交互命令)
查看>>
netty与MQ使用心得
查看>>
关于dl dt dd 文字过长换行在移动端显示对齐的探讨总结
查看>>
swoolefy PHP的异步、并行、高性能网络通信引擎内置了Http/WebSocket服务器端/客户端...
查看>>
Python学习笔记
查看>>
unshift()与shift()
查看>>
使用 NPOI 、aspose实现execl模板公式计算
查看>>
行为型模式:中介者模式
查看>>
How to Notify Command to evaluate in mvvmlight
查看>>
33. Search in Rotated Sorted Array
查看>>
461. Hamming Distance
查看>>
Python垃圾回收机制详解
查看>>
{面试题1: 赋值运算符函数}
查看>>
Node中没搞明白require和import,你会被坑的很惨
查看>>
Python 标识符
查看>>
Python mysql 创建连接
查看>>
企业化的性能测试简述---如何设计性能测试方案
查看>>
centos7 安装中文编码
查看>>