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

Description

A number of schools are connected to a computer network. Agreements have been developed among those schools: each school maintains a list of schools to which it distributes software (the “receiving schools”). Note that if B is in the distribution list of school A, then A does not necessarily appear in the list of school B 
You are to write a program that computes the minimal number of schools that must receive a copy of the new software in order for the software to reach all schools in the network according to the agreement (Subtask A). As a further task, we want to ensure that by sending the copy of new software to an arbitrary school, this software will reach all schools in the network. To achieve this goal we may have to extend the lists of receivers by new members. Compute the minimal number of extensions that have to be made so that whatever school we send the new software to, it will reach all other schools (Subtask B). One extension means introducing one new member into the list of receivers of one school. 

Input

The first line contains an integer N: the number of schools in the network (2 <= N <= 100). The schools are identified by the first N positive integers. Each of the next N lines describes a list of receivers. The line i+1 contains the identifiers of the receivers of school i. Each list ends with a 0. An empty list contains a 0 alone in the line.

Output

Your program should write two lines to the standard output. The first line should contain one positive integer: the solution of subtask A. The second line should contain the solution of subtask B.

Sample Input

5
2 4 3 0
4 5 0
0
0
1 0

Sample Output

1
2 注意:
代码有误,谨慎观看(仍可AC) 思路:
求最大强连通分量,缩点。算出出度为0和入度为0的点的个数。ans1就是入度为0的点的个数,因为他们不能从其他点获取,而其他的点一定可以从其他点获取。
ans2就是入度为0的点和出度为0的点的个数的最大值,因为你需要把所有的点都弄得有入度和出度。
代码
如果我的推理没有错的话,我的代码应该是错的,只是我强行水过去了。因为正常情况下,除非只有一个强连通分量,ans1不会为0,而我测数据测出来0,所有我强行改得符合数据(就是那个max),没想到居然过了
这一切的根源,都是我的Tarjan模板有问题,而HDU竟然让我用那个模板过了一题,看来我要重学Tarjan了。
#include<iostream>
#include<cstring>
#include<vector>
#include<cstdio>
using namespace std;
vector<int>u[];
int num[],low[];
bool book[];
int index;
int in[],out[];
bool flag[];
void Tarjan_dfs(int t)
{
index++;
low[t]=num[t]=index;
book[t]=true;
int siz=u[t].size();
for(int i=;i<siz;i++){
if(!book[u[t][i]]){
Tarjan_dfs(u[t][i]);
}
if(!flag[u[t][i]]){low[t]=min(low[t],low[u[t][i]]);}
}
} int main()
{
int n,x;
scanf("%d",&n);
for(int i=;i<=n;i++){
while(true){
scanf("%d",&x);
if(x==){break;}
u[i].push_back(x);
}
}
for(int i=;i<=n;i++){
if(!book[i]){Tarjan_dfs(i);}
for(int i=;i<=n;i++){
if(num[i]!=){flag[i]=true;}
}
}
for(int i=;i<=n;i++){
for(int j=;j<u[i].size();j++){
if(low[i]!=low[u[i][j]]){
out[low[i]]++;
in[low[u[i][j]]]++;
}
}
}
int ans1,ans2;
ans1=ans2=;
int numv=;
for(int i=;i<=n;i++){
if(num[i]==low[i]){
numv++;
if(in[low[i]]==){ans1++;}
if(out[low[i]]==){ans2++;}
}
}
if(numv==){printf("1\n0\n");}
else printf("%d\n%d\n",max(,ans1),max(ans2,ans1));
}

POJ 1236 Network of Schools (Tarjan)的更多相关文章

  1. POJ 1236 Network of Schools(tarjan)

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

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

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

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

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

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

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

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

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

  6. POJ 1236 Network of Schools(tarjan算法 + LCA)

    这个题目网上有很多答案,代码也很像,不排除我的.大家的思路应该都是taijan求出割边,然后找两个点的LCA(最近公共祖先),这两个点和LCA以及其他点构成了一个环,我们判断这个环上的割边有几条,我们 ...

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

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

  8. poj 1236 Network of Schools(连通图)

    题目链接:http://poj.org/problem?id=1236 题目大意:有一些学校,学校之间可以进行收发邮件,给出学校的相互关系,问:1.至少 要向这些学校发送多少份才能使所有的学校都能获得 ...

  9. POJ 1236.Network of Schools (强连通)

    首先要强连通缩点,统计新的图的各点的出度和入度. 第一问直接输出入度为0的点的个数 第二问是要是新的图变成一个强连通图,那么每一个点至少要有一条出边和一条入边,输出出度和入度为0的点数大的那一个 注意 ...

随机推荐

  1. pip install MySQL-python 失败

    1. EnvironmentError: mysql_config not found原因:/usr/bin/mysql_config没有次文件,要安装libmysqlclient-dev, apt ...

  2. css 浮动问题 display显示 和 光标设置cursor

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>浮 ...

  3. jq的$.each()方法

    jq的$.each()方法: 语法:jQuery.each(object, [callback]) 回调函数拥有两个参数:第一个为对象的成员或数组的索引,第二个为对应变量或内容.如果需要退出 each ...

  4. Python中xlrd模块解析

    xlrd 导入模块 import xlrd 2.打开指定的excel文件,返回一个data对象 data = xlrd.open_workbook(file)                     ...

  5. Django 静态文件相关设置

    项目根目录创建  static 文件夹 settings.py 中加入 STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static") ...

  6. project 2013 显示标题

    1.分析 右键只能插入任务,不能插入标题,而插入任务会被编号,目前只能在打印设置标题,不能在编辑界面显示标题的,或者使用最高级任务的方式 2.解决 文件,打印,页面设置,页眉,居中,输入标题,这样打印 ...

  7. MT【295】线段比的仿射变换

    已知$F_1,F_2$分别为椭圆$\dfrac{x^2}{4}+\dfrac{y^2}{3}=1$的左右焦点.$A,B,C$是椭圆上$x$轴上方的三点,且$AF_1//BO//CF_2$,则$\dfr ...

  8. Hdoj 1159.Common Subsequence 题解

    Problem Description A subsequence of a given sequence is the given sequence with some elements (poss ...

  9. luogu4728 双递增序列 (dp)

    设f[i][j]表示以i位置为第一个序列的结尾,第一个序列的长度为j,第二个序列的结尾的最小值 那么对于f[i][j],有转移$f[i+1][j+1]=min\{f[i+1][j+1],f[i][j] ...

  10. QBXT Day2主要是数据结构(没写完先占坑)

    简单数据结构 本节课可能用到的一些复杂度: O(log n). 1/1+1/1/.....1/N+O(n log n) 在我们初学OI的时候,总会遇到这么一道题. 给出N次操作,每次加入一个数,或者询 ...