博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ1236-Network of Schools(Tarjan + 缩点)
阅读量:6259 次
发布时间:2019-06-22

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

题意:给定一张有向图,问最少选择几个点能遍历全图。以及最少加入几条边使得有向图成为一个强连通图。

思路:对于有向图而言,首先求出有几个强连通分量,之后将每一个强连通分量缩点,形成DAG。本题开头第一句就说图是连通的了。

之后想要遍历整张图的话。仅仅要找出入度为0的点有几个,而加入边的数量就取决于全部点的出入度大小。

代码:

#include 
#include
#include
#include
#include
#include
using namespace std;const int MAXN = 105;vector
g[MAXN];stack
s; int pre[MAXN], lowlink[MAXN], sccno[MAXN], dfs_clock, scc_cnt;int n, in[MAXN], out[MAXN];void tarjan(int u) { pre[u] = lowlink[u] = ++dfs_clock; s.push(u); for (int i = 0; i < g[u].size(); i++) { int v = g[u][i]; if (!pre[v]) { tarjan(v); lowlink[u] = min(lowlink[u], lowlink[v]); } else if (!sccno[v]) lowlink[u] = min(lowlink[u], pre[v]); } if (lowlink[u] == pre[u]) { scc_cnt++; int x = -1; while (x != u) { x = s.top(); s.pop(); sccno[x] = scc_cnt; } }}void find_scc() { memset(pre, 0, sizeof(pre)); memset(sccno, 0, sizeof(sccno)); memset(lowlink, 0, sizeof(lowlink)); dfs_clock = scc_cnt = 0; for (int i = 1; i <= n; i++) if (!pre[i]) tarjan(i);}int main() { while (scanf("%d", &n) != EOF) { int u; for (int i = 1; i <= n; i++) { g[i].clear(); while (scanf("%d", &u) && u) g[i].push_back(u); } find_scc(); if (scc_cnt == 1) { printf("1\n0\n"); continue; } else { memset(in, 0, sizeof(in)); memset(out, 0, sizeof(out)); for (int u = 1; u <= n; u++) { for (int i = 0; i < g[u].size(); i++) { int v = g[u][i]; if (sccno[u] != sccno[v]) { in[sccno[v]]++; out[sccno[u]]++; } } } int a = 0, b = 0; for (int i = 1; i <= scc_cnt; i++) { if (in[i] == 0) a++; if (out[i]== 0) b++; } int ans = max(a, b); printf("%d\n%d\n", a, ans); } } return 0;}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

你可能感兴趣的文章
开源堡垒机 Jumpserver v1.4.8 发布 , Bug 修复版本
查看>>
(十五)Java并发性和多线程-死锁
查看>>
第1章 JVM语言家族概览 《Kotin 编程思想·实战》
查看>>
spring之HttpInvoker
查看>>
我为什么“放弃”从事八年的嵌入式领域
查看>>
TypeScript基础入门 - 函数 - 重载
查看>>
【ASP】当前星期几和月份名称输出
查看>>
好看的皮囊 · 也是大自然的杰作 · 全球高质量 · 美图 · 集中营 · 美女 · 2017-08-23期...
查看>>
小二,给我来一个递增序列
查看>>
images
查看>>
又一款开源手机要来了 —— WiPhone
查看>>
爬虫入门之反反爬虫机制cookie UA与中间件(十三)
查看>>
【飞天存储服务月报】2018年6月刊
查看>>
AJAX的一些硬知识
查看>>
第208天:jQuery框架封装(一)
查看>>
JNDIUtil、DBCPUtil、C3P0Util,三种数据源的工具类的区别?
查看>>
暴风魔镜裁员了,但是VR的春天依然在路上
查看>>
Java并发编程笔记之CyclicBarrier源码分析
查看>>
Weex在苏宁移动办公开发中是如何实践的?
查看>>
阿里倡导成立“罗汉堂”, 6名诺贝尔奖得主加入
查看>>