POJ 1236 Network of Schools(强连通 Tarjan+缩点)

ACM

题目地址:POJ 1236

题意: 

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

分析: 

HDU 2767 Proving Equivalences题解)一样的题目,只是多了个问题,事实上转化成DAG后就不难考虑了,事实上仅仅要选择入度为0的点即可了。

代码:

/*
* Author: illuz <iilluzen[at]gmail.com>
* File: 1236.cpp
* Create Date: 2014-07-30 15:13:12
* Descripton: Tarjan
*/ #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#include <vector>
#include <stack>
#define repf(i,a,b) for(int i=(a);i<=(b);i++)
typedef long long ll; const int N = 105; vector<int> G[N];
stack<int> S;
int low[N], dfn[N], sccno[N], tclock, scccnt;
int id[N], od[N];
int n, rd; void tarjan(int u) {
low[u] = dfn[u] = ++tclock;
S.push(u); int sz = G[u].size();
repf (i, 0, sz - 1) {
int v = G[u][i];
if (!dfn[v]) {
tarjan(v);
low[u] = min(low[u], low[v]);
} else if (!sccno[v]) {
low[u] = min(low[u], dfn[v]);
}
} if (low[u] == dfn[u]) {
scccnt++;
int v = -1;
while (v != u) {
v = S.top();
S.pop();
sccno[v] = scccnt;
}
}
} void read() {
repf (i, 1, n) {
G[i].clear();
while (scanf("%d", &rd) && rd) {
G[i].push_back(rd);
}
}
} void find_scc() {
tclock = scccnt = 0;
memset(dfn, 0, sizeof(dfn));
memset(low, 0, sizeof(low));
memset(sccno, 0, sizeof(sccno)); repf (i, 1, n) {
if (!dfn[i]) {
tarjan(i);
}
}
} void solve() {
if (scccnt == 1) {
printf("1\n0\n");
return;
} memset(id, 0, sizeof(id));
memset(od, 0, sizeof(od)); repf (u, 1, n) {
int sz = G[u].size();
repf (i, 0, sz - 1) {
int v = G[u][i];
if (sccno[u] != sccno[v]) {
id[sccno[v]]++;
od[sccno[u]]++;
}
}
} int idnum = 0, odnum = 0;
repf (i, 1, scccnt) {
idnum += (id[i] == 0);
odnum += (od[i] == 0);
} printf("%d\n%d\n", idnum, max(idnum, odnum));
} int main() {
while (~scanf("%d", &n)) {
read();
find_scc();
solve();
}
return 0;
}

POJ 1236 Network of Schools(强连通 Tarjan+缩点)的更多相关文章

  1. POJ 1236 Network of Schools(Tarjan缩点)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16806   Accepted: 66 ...

  2. poj 1236 Network of Schools(tarjan+缩点)

    Network of Schools Description A number of schools are connected to a computer network. Agreements h ...

  3. POJ 1236 Network Of Schools (强连通分量缩点求出度为0的和入度为0的分量个数)

    Network of Schools A number of schools are connected to a computer network. Agreements have been dev ...

  4. POJ 1236 Network of Schools (强连通分量缩点求度数)

    题意: 求一个有向图中: (1)要选几个点才能把的点走遍 (2)要添加多少条边使得整个图强联通 分析: 对于问题1, 我们只要求出缩点后的图有多少个入度为0的scc就好, 因为有入度的scc可以从其他 ...

  5. POJ 1236 Network of Schools (Tarjan)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22745   Accepted: 89 ...

  6. POJ 1236 Network of Schools(tarjan)

    Network of Schools Description A number of schools are connected to a computer network. Agreements h ...

  7. POJ 1236 Network of Schools(tarjan)题解

    题意:一个有向图.第一问:最少给几个点信息能让所有点都收到信息.第二问:最少加几个边能实现在任意点放信息就能传遍所有点 思路:把所有强连通分量缩成一点,然后判断各个点的入度和出度 tarjan算法:问 ...

  8. POJ 1236 Network of Schools(tarjan求强连通分量+思维)

    题目链接:http://poj.org/problem?id=1236 题目大意: 给你一个网络(有向图),有两个任务: ①求出至少同时需要几份副本可以使得整个网络都获得副本 ②至少添加多少信息表(有 ...

  9. POJ 1236 Network of Schools (tarjan算法+缩点)

    思路:使用tarjan求强连通分量并进行缩点,判断所有入度为0的点,这个点就是必须要给予文件的点,分别计算出度,入度为零的点的个数,取二者的最大值就是把这个图变成强连通需要加的边数. 一个取值需要讨论 ...

  10. poj 1236 Network of Schools 【Tarjan】

    题目链接:http://poj.org/problem?id=1236 题意: 本题为有向图. 需解决两个问题: 1 须要给多少个点,才干传遍全部点. 2 加多少条边,使得整个图变得强连通. 使用Ta ...

随机推荐

  1. Oracle包的概念

    转自:http://www.cnblogs.com/lovemoon714/archive/2012/02/29/2373695.html 1.为什么要使用包?       答: 在一个大型项目中,可 ...

  2. struts1标签(html:text)

    这个标签可能是出现频率最高的标签了. 功能: <html:text/>产生HTML语句: <input type=”text”…> 也就是在页面上产生input类型的显示标签. ...

  3. The following classes could not be found: - android.support.v7.internal.widget.ActionBarOverlayLayou解决方案

    如图出现如下的错误的时候,一般都是升级Androdi Studio 后导致的,引入库不全,或者其他 东西缺少,可以如下解决方案: 或者如下的解决方案: 在布局文件的Design界面中,修改原来的App ...

  4. codeforces 416B. Appleman and Tree 树形dp

    题目链接 Fill a DP table such as the following bottom-up: DP[v][0] = the number of ways that the subtree ...

  5. 五年26个版本:Linux系统内核全程回顾

    Phoronix.com今天将他们对Linux系统的研究发挥到了极致:从2005年年中的2.6.12,到正在开发中的2.6.37,五年多来的26个Linux内核版本来了个“群英荟萃”! 完成如此庞大规 ...

  6. SGU 200 Cracking RSA (高斯消元)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意:给出m个整理,因子全部为前t个素数.问有多少 ...

  7. Codeforces Round #263

    http://codeforces.com/contest/461 A.水题 B.太挫了,竟然被hack了一发.... C.贪心..竟然没看出来时哈夫曼编码问题 D.题目大意:给一棵树,每一个点为白色 ...

  8. Mybatis上路_05-使用命令行自动生成【转】

    http://my.oschina.net/vigiles/blog/125127 Mybatis上路_05-使用命令行自动生成   1人收藏此文章, 我要收藏 发表于1个月前(2013-04-24 ...

  9. Migration data on SQL

    从表里面导出数据XML: -- export declare @xml xml set @xml = (select * from ( select TableName = 'Schema', xml ...

  10. iOS:原生二维码扫描

    做iOS的二维码扫描,有两个第三方库可以选择,ZBar和ZXing.今天要介绍的是iOS7.0后AVFoundation框架提供的原生二维码扫描. 首先需要添加AVFoundation.framewo ...