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

第一问直接输出入度为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. Linux Shell编程(20)——基本命令

    新手必须要掌握的初级命令ls基本的列出所有文件的命令.但是往往就是因为这个命令太简单,所以我们总是低估它.比如,用 -R 选项,这是递归选项,ls 将会以目录树的形式列出所有文件, 另一个很有用的选项 ...

  2. [转载]函数getopt(),及其参数optind

    最近用到了getopt()这个函数,对它进行了一些了解.这篇博文还是写的非常清楚的.值得学习.最近在改进一个开源项目,希望自己能静下心好好分析代码. ------------------------- ...

  3. vim setting

    django_百度搜索 最近合并代码,发现文件缩进经常不一致,请大家把以下配置放到自己主目录下.vimrc文件中.   set tabstop=4   set shiftwidth=4   set e ...

  4. JavaEE中遗漏的10个最重要的安全控制

    本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! JavaEE有一些超赞的内置安全机制,但它们远远不能覆盖应用程序要面临的所有威胁.很多常见攻击,例如跨站点脚本攻 ...

  5. Telephone directory - SGU 127(水)

    题目大意:有一个电话簿,每页最多纪录K行电话,现在有N个电话要记录在电话薄上,要求同页的电话号码的首位要相同,电话簿的前两页是纪录的别的东西,问最少需要多少页电话簿. 分析:直接求首位数字有多少个即可 ...

  6. Javascript诞生与历史

    基本常识 Brendan Eich在1995年4月入职Netscape Communications Corporation(网景通信公司).并于1995年5月用10天时间发明了Javascript. ...

  7. 手把手教你mysql(十)索引

    手把手教你mysql(十)索引 一:索引的引入 索引定义:索引是由数据库表中一列或者多列组合而成,其作用是提高对表中数据的查询速度. 类似于图书的目录,方便快速定位,寻找指定的内容,如一本1000页的 ...

  8. 常用iptables规则整理

    1.仅允许内部合法的IP地址访问服务器 #setting access rules #one,in access rules,allow all the ips of hudong.com iptab ...

  9. Docker的基本操作

    容器基本操作 1.启动容器 $docker run image [COMMAND] [ARG…] run在新容器中执行命令 2.启动交互式容器 $docker run -i -t IMAGE /bin ...

  10. Linux编程---线程

    首先说一下线程的概念.事实上就是运行在进程的上下文环境中的一个运行流.普通进程仅仅有一条运行流,可是线程提供了多种运行的路径并行的局面. 同一时候,线程还分为核心级线程和用户级线程.主要差别在属于核内 ...