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 题意: 有好 ...
随机推荐
- 学习FFmpeg API
ffmpeg是编解码的利器,用了很久,以前看过dranger 的教程,非常精彩,受益颇多,是学习ffmpeg api很好的材料.可惜的是其针对的ffmpeg版本已经比较老了,而ffmpeg的更新又很快 ...
- php-fpm 在centos 7下的安装配置
安装php: sudo yum install php php-fpm php-mysql php-mbstring php-mcrypt php-sockets php-curl php-commo ...
- According to TLD or attribute directive in tag file, attribute test does not accept any expressions
HTTP Status 500 - /WEB-INF/views/emp/list.jsp (line: 30, column: 4) According to TLD or attribute di ...
- python3 中mlpy模块安装 出现 failed with error code 1的决绝办法(其他模块也可用本方法)
在python3 中安装其它模块时经常出现 failed with error code 1等状况,使的安装无法进行.而解决这个问题又非常麻烦. 接下来以mlpy为例,介绍一种解决此类安装问题的办法. ...
- 那些年,我们一起追的面试题。。to be continued!!!
1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?答:Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件.Java被 ...
- java多线程的几种实现方式记录
传统的实现线程的方式为三种,分别为继承Thread类,重写run()方法:实现Runable接口,重写run()方法:实现callable接口,重写call()方法:下面来记录一下最基本的三种编码实现 ...
- 解决错误 Cannot await in the body of a catch clause
解决错误 Cannot await in the body of a catch clause static async Task f() { ExceptionDispatchInfo ca ...
- highCharts的多图导出
已实现HighChart的多图导出,不能上传文件,所以需要call我735734485.
- grunt安装与运行
用grunt前,需要先安装nodejs.因为grunt依赖于nodejs.nodejs的安装可以参照我的博客里头的nodejs的下载,安装与测试. 第一步:安装grunt-CLI 注意你的电脑要联 ...
- Bash Shell的操作环境
1.路径与命令查找顺序 基本上,命令运行的顺序可以这样看: 1)以相对/绝对路径执行命令,例如“/bin/ls”或“./ls”; 2)由alias找到该命令来执行; 3)由bash内置的(builti ...