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

第一问直接输出入度为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. unity3d Hair real time rendering 真实头发实时渲染

    先放上效果 惊现塞拉酱 算法是Weta Digital根据siggraph2003的论文加以改进,改进之前使用的是Kajiya and Kay’s 模型,它能量不守恒,也就是说不是基于物理的,不准确 ...

  2. HDOJ 2017 字符串统计

    Problem Description 对于给定的一个字符串,统计其中数字字符出现的次数. Input 输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组 ...

  3. poj 2425 A Chess Game(SG函数)

    A Chess Game Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 3551   Accepted: 1440 Desc ...

  4. iOS设备隐藏StateBar

    //隐藏StateBar - (BOOL)prefersStatusBarHidden {     returnYES; }

  5. UIAlertView的使用

    UIAlertView是用于弹出一个对话框进行选择或者消息提示 构造函数:     UIAlertView * alert = [[UIAlertViewalloc] initWithTitle:@& ...

  6. 关于android 自己实现 back键 home键

    今天在被问到一个问题的时候突然想要看看这些东西了.因为一直以来,我返回上个界面,和大家普遍的方法都是一样的. 1. finish()本页面. 2. intent 跳转到上个页面. 一 ,在 按下手机上 ...

  7. CentOS 7 安装和配置JDK

    1.下载linux版的JDk 2.cd /usr/local 目录下,上传刚刚下载jdk文件 3.rpm -ivh jdk-8u111-linux-x64.rpm 4.设置环境变量 找到profile ...

  8. 一步一步写算法(之 A*算法)

    [ 声明:版权全部,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在前面的博客其中,事实上我们已经讨论过寻路的算法.只是,当时的演示样例图中,可选的路径是唯一的 ...

  9. android 20 Intnet类重要的成员变量

    Intnet类重要的成员变量: <intent-filter> <action android:name="android.intent.action.MAIN" ...

  10. android 15 activity跳转

    从一个屏幕跳到另一个屏幕,一个activity跳转到另一个activity,Intent类用于组件之间传递数据和跳转,组件包括不仅activity. package com.sxt.day04_01; ...