poj 1236 Network of Schools(连通图)
题目链接: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(连通图)的更多相关文章
- POJ 1236 Network of Schools 连通图缩点
题目大意:有向图连通图,第一问求至少需要多少个软件才能传输到所有学校,第二问求至少需要增加多少条路使其成为强连通图 题目思路:利用Tarjan算法经行缩点,第一问就是求缩点后入度为0的点的个数(特殊情 ...
- POJ 1236 Network of Schools(强连通 Tarjan+缩点)
POJ 1236 Network of Schools(强连通 Tarjan+缩点) ACM 题目地址:POJ 1236 题意: 给定一张有向图,问最少选择几个点能遍历全图,以及最少加入�几条边使得 ...
- POJ 1236 Network of Schools(强连通分量)
POJ 1236 Network of Schools 题目链接 题意:题意本质上就是,给定一个有向图,问两个问题 1.从哪几个顶点出发,能走全全部点 2.最少连几条边,使得图强连通 思路: #inc ...
- Poj 1236 Network of Schools (Tarjan)
题目链接: Poj 1236 Network of Schools 题目描述: 有n个学校,学校之间有一些单向的用来发射无线电的线路,当一个学校得到网络可以通过线路向其他学校传输网络,1:至少分配几个 ...
- poj 1236 Network of Schools(连通图入度,出度为0)
http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- poj 1236 Network of Schools(又是强连通分量+缩点)
http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- [tarjan] poj 1236 Network of Schools
主题链接: http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS Memory Limit: 10000K To ...
- POJ 1236 Network of Schools(Tarjan缩点)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16806 Accepted: 66 ...
- POJ 1236——Network of Schools——————【加边形成强连通图】
Network of Schools Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u ...
- POJ 1236 Network of Schools - 缩点
POJ 1236 :http://poj.org/problem?id=1236 参考:https://www.cnblogs.com/TnT2333333/p/6875680.html 题意: 有好 ...
随机推荐
- AX7: Quick and easy debugging
This purpose of this blog is to show how you can get quickly get started with debuggingin AX7, speci ...
- onethink入门笔记(一)
由于公司需求所以大概花了一个星期搞了一个一个基于onethink的数据管理平台demo不得不说onethink这个基于thinkphp3.2.3的框架还是很棒的 让我这个没基础过php的人也能在一星期 ...
- border:none;与border:0;的区别
border:none表示边框样式无,border:0表示边框宽度为0;当定义了border:none,即隐藏了边框的显示,实际就是边框宽度为0. 当定义边框时,必须定义边框的显示样式.因为边框默认样 ...
- python之GUI编程(二)win10 64位 pygame的安装
pygame的下载网址: http://www.pygame.org/download.shtml 我下载了第一个 很显然,安装的时候出现了如图中的尴尬,更改了安装目录后,在Python shell中 ...
- 关于GPL的一些知识
1.什么是GPL GPL许可协议(GNU General Public License):只要软件中包含有其他GPL协议的产品或代码,那么该软件就必须也采用GPL许可协议且开源及免费.具有以下特点: ...
- 浅析tomcat nio 配置
[尊重原创文章摘自:http://blog.csdn.net/yaerfeng/article/details/7679740] tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成 ...
- android入门:第一天
android是什么? 是一个基于linux开源的操作系统,主要适用于智能设备,如智能手机,平板,智能电视,智能手表,谷歌眼镜,智能家居,由google开发,2008年开发出第一个版本 android ...
- c语言自定义BOOL函数
C语言中没有BOOL类型变量,它是C++独有的,由于使用BOOL类型可以使代码更具有可读性,很多编程者都在C中自己定义了类似的应用,一般方法有两种: 第一种:采用宏定义方式 typedef int B ...
- SSDP
SSDP:Simple Service Discover Protocol,简单服务发现协议,PC机只要网口UP,就会通过该协议寻找可用的网络服务.PC机发出的报文基于UDP协议的1900端口发送组播 ...
- Python自动化 【第十四篇】:HTML介绍
本节内容: Html 概述 HTML文档 常用标签 2. CSS 概述 CSS选择器 CSS常用属性 1.HTML 1.1概述 HTML是英文Hyper Text Mark-up Language(超 ...