hdu 3836 Equivalent Sets
来源:互联网 发布:ubuntu更新 编辑:程序博客网 时间:2024/05/16 09:43
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3836
题目大意:给你一张有向图要求最少加多少条边时该图变成强连通图。
Tarjan缩点。。
#include<bits/stdc++.h>using namespace std;const int N = 20100;struct Tarjan_scc { stack<int> s; bool instack[N]; struct edge { int to, next; }G[N * 3]; int idx, scc, tot, in[N], out[N], dfn[N], low[N], head[N], sccnum[N]; inline void init(int n) { idx = scc = tot = 0; while (!s.empty()) s.pop(); for (int i = 0; i < n + 2; i++) { head[i] = -1; instack[i] = false; in[i] = out[i] = dfn[i] = low[i] = sccnum[i] = 0; } } inline void add_edge(int u, int v) { G[tot].to = v, G[tot].next = head[u], head[u] = tot++; } inline void built(int m) { int u, v; while (m--) { scanf("%d %d", &u, &v); add_edge(u, v); } } inline void tarjan(int u) { dfn[u] = low[u] = ++idx; instack[u] = true; s.push(u); for (int i = head[u]; ~i; i = G[i].next) { int &v = G[i].to; if (!dfn[v]) { tarjan(v); low[u] = min(low[u], low[v]); } else if (instack[v] && dfn[v] < low[u]) { low[u] = dfn[v]; } } if (dfn[u] == low[u]) { int v = 0; scc++; do { v = s.top(); s.pop(); instack[v] = false; sccnum[v] = scc; } while (u != v); } } inline void solve(int n, int m) { init(n); built(m); for (int i = 1; i <= n; i++) { if (!dfn[i]) tarjan(i); } int x1 = 0, x2 = 0; for (int u = 1; u <= n; u++) { for (int i = head[u]; ~i; i = G[i].next) { int v = G[i].to; if (sccnum[u] != sccnum[v]) { in[sccnum[v]]++; out[sccnum[u]]++; } } } for (int i = 1; i <= scc; i++) { if (!in[i]) x1++; if (!out[i]) x2++; } printf("%d\n", 1 == scc ? 0 : max(x1, x2)); }}go;int main() {#ifdef LOCAL freopen("in.txt", "r", stdin); freopen("out.txt", "w+", stdout);#endif int n, m; while (~scanf("%d %d", &n, &m)) { go.solve(n, m); } return 0;}
0 0
- hdu 3836 Equivalent Sets
- hdu 3836 Equivalent Sets
- HDU 3836 Equivalent Sets
- hdu 3836 Equivalent Sets
- HDOJ/HDU 3836 Equivalent Sets
- [图论] hdu 3836 Equivalent Sets
- [tarjan] hdu 3836 Equivalent Sets
- HDU 3836 — Equivalent Sets
- hdu acm 3836 Equivalent Sets
- HDU 3836 Equivalent Sets 强连通分量
- HDU 3836 Equivalent Sets(强连通分量)
- HDU 3836 Equivalent Sets(Tarjan+缩点)
- hdu 3836 Equivalent Sets【强联通】
- HDU 3836:Equivalent Sets【强连通】
- HDU 3836 Equivalent Sets 强连通分量
- HDU 3836 Equivalent Sets(强连通分量)
- HDU 3836 —— Equivalent Sets
- hdu 3836 Equivalent Sets //tarjan+缩点
- 项目适配iOS9遇到的一些问题及解决办法(持续更新)
- x264 n-th pass编码时候Stats文件的含义
- 如何查看Android应用使用的内存
- HDU 5037 Frogs(数论)
- C 从键盘接收数据构成二维数组
- hdu 3836 Equivalent Sets
- UIBezierPath用法
- String类基础知识
- LeetCode 34 Search for a Range(搜索范围)
- Python抓取图片小代码
- Java之查找html文件当中的所有标签
- [MyBatis]动态输出SQL语句
- SQL学习笔记(4)之外键
- UIBezierPath应用画板 及绘图