首先要强连通缩点,统计新的图的各点的出度和入度。

第一问直接输出入度为0的点的个数

第二问是要是新的图变成一个强连通图,那么每一个点至少要有一条出边和一条入边,输出出度和入度为0的点数大的那一个

注意特判,输入已经是一个极大强连通图的情况,输出 1 0

code

/*
无向图强连通的Garbow算法,思路与Tarjan算法相同,实现更直接,效率更好
时间复杂度同样为O(n+m)
思路:
dfn记录访问顺序,st为访问栈,tem为辅助栈
每次找到环时,将环中除顺序最靠前的点其他的点全出栈st
tem中当前点之上(包括当前点)的所有点为一个强连通分量
*/
#include <iostream>
#include <cstring>
using namespace std;
const int INF = 109;
struct node {
int u, v, ne;
} E[INF*INF];
int head[INF], cnt;
int dfn[INF], num[INF], sta[INF], Tops, tem[INF], Topt, scc;
int n;
void addedge (int u, int v) {
E[++cnt].u = u, E[cnt].v = v;
E[cnt].ne = head[u];
head[u] = cnt;
}
void dfs (int k, int t) {
sta[++Tops] = tem[++Topt] = k;
dfn[k] = ++t;
for (int i = head[k]; i != 0; i = E[i].ne) {
int v = E[i].v;
if (!dfn[v]) dfs (v, t);
else if (num[v] == 0)
while (dfn[sta[Tops]] > dfn[v]) Tops--;
}
if (sta[Tops] == k) {
Tops--, scc++;
do
num[tem[Topt]] = scc;
while (tem[Topt--] != k);
}
}
void Garbow (int n) {
memset (dfn, 0, sizeof dfn);
memset (num, 0, sizeof num);
Tops = Topt = scc = 0;
for (int i = 1; i <= n; i++)
if (!num[i]) dfs (i, 0);
}
void make() {
Garbow (n);
int degi[INF], dego[INF];
memset (degi, 0, sizeof degi);
memset (dego, 0, sizeof dego);
if (scc == 1) {
cout << 1 << endl << 0 << endl;
return ;
}
for (int i = 1; i <= cnt; i++) {
int u = E[i].u, v = E[i].v;
if (num[u] != num[v]) {
degi[num[v]] = 1;
dego[num[u]] = 1;
}
}
int ans1=0, ans2=0;
for (int i = 1; i <= scc; i++) {
if (degi[i] == 0) ans1++;
if (dego[i] == 0) ans2++;
}
cout << ans1 <<endl<< max (ans1, ans2);
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
int x;
while (cin >> x && x)
addedge (i, x);
}
make();
return 0;
}

  

POJ 1236.Network of Schools (强连通)的更多相关文章

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

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

  2. poj~1236 Network of Schools 强连通入门题

    一些学校连接到计算机网络.这些学校之间已经达成了协议: 每所学校都有一份分发软件的学校名单("接收学校"). 请注意,如果B在学校A的分发名单中,则A不一定出现在学校B的名单中您需 ...

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

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

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

    POJ 1236 Network of Schools(强连通 Tarjan+缩点) ACM 题目地址:POJ 1236 题意:  给定一张有向图,问最少选择几个点能遍历全图,以及最少加入�几条边使得 ...

  5. POJ 1236 Network of Schools(强连通分量)

    POJ 1236 Network of Schools 题目链接 题意:题意本质上就是,给定一个有向图,问两个问题 1.从哪几个顶点出发,能走全全部点 2.最少连几条边,使得图强连通 思路: #inc ...

  6. Poj 1236 Network of Schools (Tarjan)

    题目链接: Poj 1236 Network of Schools 题目描述: 有n个学校,学校之间有一些单向的用来发射无线电的线路,当一个学校得到网络可以通过线路向其他学校传输网络,1:至少分配几个 ...

  7. poj 1236 Network of Schools(又是强连通分量+缩点)

    http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Su ...

  8. [tarjan] poj 1236 Network of Schools

    主题链接: http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS   Memory Limit: 10000K To ...

  9. poj 1236 Network of Schools(连通图入度,出度为0)

    http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Su ...

  10. POJ 1236 Network of Schools (有向图的强连通分量)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9073   Accepted: 359 ...

随机推荐

  1. 【EJS】

    // 用=号输出,就会被escapge转义编码 <%= VARIABLE_NAME %> // 用“-”输出原始内容, 不会被escape <%- VARIABLE_NAME %&g ...

  2. 传智播客C语言视频第一季(有效下载期为10.1-10.7,10.8关闭)

     J:\传智播客_尹成_C语言从菜鸟到高手├─传智播客_尹成_C语言从菜鸟到高手_第一章C语言概述A│      第一讲1.1C语言第一阶段.mp4│      第二讲1.2c语言入门教程.mp4 ...

  3. makefile 自动处理头文件的依赖关系 (zz)

    现在我们的Makefile写成这样: all: main main: main.o stack.o maze.ogcc $^ -o $@ main.o: main.h stack.h maze.hst ...

  4. Research Papers

    NSE, $\bbu$ [Papers]NSE, $u$, Lorentz space [Sohr, JEE, 2001] [Papers]NSE, $u$, Lorentz space [Bjorl ...

  5. HDU-2126 Buy the souvenirs

    数组01背包. http://acm.hdu.edu.cn/showproblem.php?pid=2126 http://blog.csdn.net/crazy_ac/article/details ...

  6. maya绝招(41--60)

    第41招 捕捉和旋转 从MAYA5开始,双击工具箱中的移动缩放旋转工具,马上就可以调出工具属性栏.以旋转为例,将Snap Rotate勾选,并设置Step Size数值,就可以旋转特定的数值了 第42 ...

  7. JavaScript 概览 更新时间2014-0414-0837

    一些概念 DOM(文档对象模型)是HTML和XML的应用程序接口(API).DOM Level1规划文档结构:DOM Level2扩展了对鼠标和用户界面事件等的支持:DOM Level3支持了XML1 ...

  8. openStack opts

  9. 通过例子学python(2.1)

    第二章 列表和元组 2.1 序列概览 #第2章 列表和元组 #2.1 序列概览 #序列sequence , 序列中每一个元素被分配一个序号,即元素的位置,也称为索引. #从前往后,0,1,2,3,:从 ...

  10. fastjson 的简单说明及使用

    fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发. 各个版本jar包下载地址:https://repo1.maven.org/maven2/ ...