题目链接:http://poj.org/problem?id=1236

题目大意:有一些学校,学校之间可以进行收发邮件,给出学校的相互关系,问:1.至少

要向这些学校发送多少份才能使所有的学校都能获得邮件;2.若想只发送一份即可让所有学

校都能收到邮件,则至少需要需要再进行多少次学校之间的连接。

学校之间的关系可构成图,将图进行强连通缩点成块儿后可知,每个进入数为0的点需要发

送一份;若想要所有点都连接,则需要连接数目为max(入度为0点数,出度为0点数),这

个是结论,详细证明不再贴。

代码如下:

/**

Memory: 604K        Time: 16MS
Language: G++ Result: Accepted **/
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <vector>
using namespace std;
vector<int>G[];
int n, Stack[], low[], dfn[], Time, Top, nblocks, belong[], inStack[];
int in[], out[];
void Init()
{
for(int i=; i<=n; i++)
{
G[i].clear();
low[i] = dfn[i] = in[i] = out[i] = inStack[i] = belong[i] = ;
}
Time = Top = nblocks = ;
}
void Tarjin(int u)
{
low[u] = dfn[u] = ++Time;
Stack[Top++] = u;
inStack[u] = ;
int v, len = G[u].size();
for(int i=; i<len; i++)
{
v = G[u][i];
if(!dfn[v])
{
Tarjin(v);
low[u] = min(low[u], low[v]);
}
else if(inStack[v])
low[u] = min(low[u], dfn[v]);
} if(low[u]==dfn[u])///强连通缩点
{
nblocks++;
do
{
v = Stack[--Top];
inStack[v] = ;
belong[v] = nblocks;
}
while(u!=v);
}
}
int main()
{
while(scanf("%d", &n)!=EOF)
{
Init();
int x;
for(int i=; i<=n; i++)
{
while(scanf("%d", &x), x)
G[i].push_back(x);
}
for(int i=; i<=n; i++)
{
if(!dfn[i])
Tarjin(i);
}
for(int i=; i<=n; i++)
{
int len = G[i].size();
for(int j=; j<len; j++)///标记缩点后的出入度
{
int u = belong[i];
int v = belong[G[i][j]];
if(u!=v)
{
out[u]++;
in[v]++;
}
}
}
int in_zero_num = ;
int out_zero_num = ;
for(int i=; i<=nblocks; i++)
{
if(!in[i])in_zero_num++;
if(!out[i])out_zero_num++;
}
if(nblocks==)
{
printf("1\n0\n");
continue;
}
printf("%d\n%d\n", in_zero_num, max(in_zero_num, out_zero_num));
}
return ;
}

/**

唐僧师徒四人一起去取经,沙僧是个细心的人,一路上照顾师徒四人的饮食起居,

这天他在整理大师兄的内裤,发现有个洞,然后就耐心的缝了起来,第二天发现

又有个洞,于是又补了起来,第三天 依旧还是有个洞,正当他拿起针线时,猴哥

过来,一脚踹飞了沙僧。尼玛,把洞缝上,尾巴搁哪儿?

**/

poj 1236 Network of Schools(连通图)的更多相关文章

  1. POJ 1236 Network of Schools 连通图缩点

    题目大意:有向图连通图,第一问求至少需要多少个软件才能传输到所有学校,第二问求至少需要增加多少条路使其成为强连通图 题目思路:利用Tarjan算法经行缩点,第一问就是求缩点后入度为0的点的个数(特殊情 ...

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

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

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

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

  4. Poj 1236 Network of Schools (Tarjan)

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

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

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

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

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

  7. [tarjan] poj 1236 Network of Schools

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

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

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

  9. POJ 1236——Network of Schools——————【加边形成强连通图】

    Network of Schools Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u ...

  10. POJ 1236 Network of Schools - 缩点

    POJ 1236 :http://poj.org/problem?id=1236 参考:https://www.cnblogs.com/TnT2333333/p/6875680.html 题意: 有好 ...

随机推荐

  1. Linux 任务计划

    一.配置cron实现自动化 使用cron实现任务自动化可以通过修改/etc/crontab文件以及使用crontab命令实现,其结果是一样的. 1./etc/crontab文件实现自动化 cron守护 ...

  2. ListFragment创建及其生命周期

    相同的ListFragment 带有一个无参构造 一个有参构造 在该Fragment所依附的Activity视图创建时被实例化一次 方法周期分别为1.无参构造2.onInflate3.onAttach ...

  3. jquery 农历日历 可自适应

    在网上找了许多大牛做的农历日历,但是不是不符合项目中的要求,就是本身就有问题有Bug ,把大牛门的做日历看了n遍 自己又改造了一遍得到了这个:随后日历又要做个自适应的长宽,又在js中改造代码..... ...

  4. 500lines项目简介

    "500行或更少" "What I cannot create, I do not understand." -- Richard Feynman <50 ...

  5. es6 Class的继承extends & super

    Class之间可以通过extends关键字,实现继承. 子类会继承父类的属性和方法. class Point { constructor(x, y) { this.x = x; this.y = y; ...

  6. 关于C中struct和union长度的详解

    这几天看<代码大全>中的第十三章---不常见的数据类型,里面讲解到了C语言中的struct以及对指针的解释,联想到以前看过相关的关于C语言中stuct长度的文章,只是现在有些淡忘了,因此今 ...

  7. SQL日期格式化应用大全

    Sql Server 中一个非常强大的日期格式化函数Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect CONVE ...

  8. thinkphp修改及编写标签库,编辑器的使用

    在view目录下创建Index_aaa.html <!DOCTYPE html> <html> <head> <meta charset="UTF- ...

  9. nodejs 在linux上后台运行

    1.用forever  进行管理 npm install -g forever forever start index.js   2. 用自带的服务nohub     nohup node index ...

  10. 多媒体(2):WAVE文件格式分析

    目录 多媒体(1):MCI接口编程 多媒体(2):WAVE文件格式分析 多媒体(3):基于WindowsAPI的视频捕捉卡操作 多媒体(4):JPEG图像压缩编码 多媒体(2):WAVE文件格式分析