【POJ1236 学校的网络】

题目大意:

  N台电脑之间能够通过有向边(u,v)从第u台电脑传输文件到第v台电脑。如果给第u台电脑投放一个文件,那么这个文件就能通过有向边传输到第v台电脑上,给你N台电脑的连接情况。那么问题来了:1、最少向这N台电脑中的几台电脑投放文件,就能使N台电脑都能接收到文件。2、最少向这N台电脑构成的图中添加几条边,使只向任何一台电脑投放文件,就能够让N台电脑接收到文件。

样例输入:

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

样例输出:

  1
  2

题解:

  首先tarjan缩点,第一问就是问有多少个入度为0的点,第二问就是问至少加多少条边使得这有向图变成一个强连通分量。

  主要问题在第二问,一个强连通分量中所有点一定有出度与入度(除法就一个点),因此缩点后的图中所有入度或者出度为0的点都要加边,每次边可以从一个出度为0的点连向入度为0的点,因为答案为min(numin,numout)

  提醒多组数据

 1 #include<iostream>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<cstdio>
 5 struct node
 6 {
 7     int next,to;
 8 }    e[200005];
 9 int head[1005],dfn[1005],low[1005],in[1005],out[1005],vis[1005];
10 int cnt,time,s[1005],bl[1005],sc;
11 using namespace std;
12 inline void insert(int u,int v)
13 {
14     e[++cnt].next=head[u];
15     head[u]=cnt;
16     e[cnt].to=v;
17 }
18 inline void init()
19 {
20     memset(head,0,sizeof(head));
21     memset(in,0,sizeof(in));
22     memset(out,0,sizeof(out));
23     memset(low,0,sizeof(low));
24     memset(vis,0,sizeof(vis));
25     memset(dfn,0,sizeof(dfn));
26     memset(bl,0,sizeof(bl));
27     memset(s,0,sizeof(s));
28 }
29 inline void tarjan(int now)
30 {
31     dfn[now]=low[now]=++time;
32     s[++s[0]]=now,vis[now]=1;
33     for(int i=head[now];i;i=e[i].next)
34     {
35         if(!dfn[e[i].to])
36         {
37             tarjan(e[i].to);
38             low[now]=min(low[now],low[e[i].to]);
39         }
40         else    if(vis[e[i].to])
41             low[now]=min(low[now],dfn[e[i].to]);
42     }
43     if(low[now]==dfn[now])
44     {
45         bl[now]=++sc;
46         vis[now]=0;
47         while(s[s[0]]!=now)
48         {
49             bl[s[s[0]]]=sc;
50             vis[s[s[0]]]=0;
51             s[0]--;
52         }
53         s[0]--;
54     }
55 }
56 int main()
57 {
58     int n,v;
59     while(scanf("%d",&n)!=EOF)
60     {
61         init();
62         cnt=time=sc=0;
63         for(int i=1;i<=n;i++)
64             while(scanf("%d",&v) && v)
65                 insert(i,v);
66         for(int i=1;i<=n;i++)
67             if(!dfn[i])    tarjan(i);
68         for(int i=1;i<=n;i++)
69             for(int j=head[i];j;j=e[j].next)
70             {
71                 if(bl[i]!=bl[e[j].to])
72                     out[bl[i]]++,in[bl[e[j].to]]++;
73             }
74         int numin=0,numout=0;
75         for(int i=1;i<=sc;i++)
76         {
77             if(!in[i])    numin++;
78             if(!out[i])    numout++;
79         }
80         if(sc==1)    printf("1\n0\n");
81         else    printf("%d\n%d\n",numin,max(numin,numout));
82     }
83 } 
时间: 2024-11-13 07:59:01

【POJ1236 学校的网络】的相关文章

IT视频课程集(包含各类Oracle、DB2、Linux、Mysql、Nosql、Hadoop、BI、云计算、编程开发、网络、大数据、虚拟化

马哥Linux培训视频课程:http://pan.baidu.com/s/1pJwk7dp Oracle.大数据系列课程:http://pan.baidu.com/s/1bnng3yZ 天善智能BI培训视频课程:http://pan.baidu.com/s/1pJ7FPXp 老方块Oracle培训全套课程:http://pan.baidu.com/s/1gdkpHxL Mysql培训课程:http://pan.baidu.com/s/1c0vliMW Oracle数据库性能优化实务课程视频+源码

使用android真机测试http网络连接异常解决办法

最近在学校android网络编程之json解析时遇到不少问题,其中之一是在使用http协议连接网络时总是出错,捣鼓了将近两天,终于略有所悟,现记录如下. 一 .问题描述 首先我是在本地tomcat服务器上部署一个web项目,通过web项目的servlet完成对客户端连接请求的操作.其他都很顺利,在电脑浏览器上输入URL访问正常,在eclipse上创建Java项目也能正常访问.但是一旦放在android项目中,就出现错误了,抛出异常信息为:failed to connect to localhos

在线教育会颠覆传统学校吗?

NO1: 近几年,人们对于传统教育,从小学到高中,再到大学教育,有各种不满,各种吐槽.甚至在人们眼里,传统教育有时就是“填鸭式”教育,传统教育培育出来的人才只是会“死读书”.关于传统教育的负面讨论也是接连不断,比如:一系列的校园侵犯案件,关于是否取消高考.高考革新的讨论,讨论当代大学生各种无能的话题,在一些不成熟的媒体推波助澜下,传统教育已经被推上了风口浪尖. 而随着计算机与网络技术的发展,在线教育应时而出.相比于传统学校教育,它在教学内容上更丰富,更灵活,能满足不同人不同层次的要求,因此,它受

poj1236 Network of Schools【强连通分量(tarjan)缩点】

转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4316263.html  ---by 墨染之樱花 [题目链接]http://poj.org/problem?id=1236 [题目描述]给一张有向图,表示学校通信网络,边<u,v>代表信息可以由u传递到v.现要完成两个任务:1.求最少把几个点作为信息传递的起点就能让信息转达到所有节点 2.最少在添加几条边就能使任意两点间可达(构造强连通分量) [思路]先利用tarjan缩点使整个图化为DAG

高校网络中心主任挨骂冤不冤?

高校网络中心主任挨骂冤不冤? 骂声困扰大学网络中心主任 重庆某大学网络中心主任曾说过一句话: “校园网发展的10余年,是网络中心不断挨骂的10余年.”相信许多大学校园网的网络中心主任对此都深有同感.看趋势,这种“不断挨骂”的情形还会伴随着校园网的发展继续下去. 挨什么骂?一个是学校的网络用户群,“网络又瘫痪了!”任何网络中心主任一听到这话脑袋就发紧:接下来是学校主管领导,“什么?钱不是批给你们了,还搞成这样?”这让网络中心主任诚惶诚恐:还有,辛辛苦苦培养出来的网络管理技术人员说,“什么鸟待遇,我

浅谈网络工程行业

网络工程,四个字听起来高端大气上档次,实际上背后有多少辛酸和喜悦为外行所了解. ---------------------题记 很多工科类大学和综合性大学都会有这样的一个专业叫网络工程,在彻底的外行人看来,网络工程就是一计算机类的专业,整天搞电脑:在普通的外行人看起来,网络工程就是it,it就是敲代码:在小年轻眼里,就是黑客:还有修电脑拉网线...每次听到这种说法,我心里都很无奈,因为从某种意义上说,在当今这个时代,网络工程是边缘产业,所以外行不懂太正常,但是我还是想写此文浅谈个人理解和感受.

2018-2019-2 网络对抗技术 20165322 Exp6 信息搜集与漏洞扫描

2018-2019-2 网络对抗技术 20165322 Exp6 信息搜集与漏洞扫描 目录 实验内容与步骤 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术 漏洞扫描 实验过程中遇到的问题 基础问题回答 实验总结与体会 实验内容与步骤 (一)各种搜索技巧的应用 Google Hacking 谷歌黑客数据库,使用的先进的JavaScript技术搜索黑客所需的信息,它包含了大量使用Google从事渗透的搜索字符串,拥有很多常用的模块. 我们可以查看针对各种系统的一些shellcode

精进不是锱铢必较,精进的要义是不疾而速

我见过很多用功的人,他们看似"勇猛精进",事实上却不是,"用功"和"勇猛精进"并非一码事. R是牛人.那年圣诞节,期末考试考完最后一门,大家聚餐,聚完餐后R回到宿舍上自习上到凌晨3点.他不仅修我们经济学专业的课程,和我们相关的所有数学课程他都会上,哪怕是只有一点儿相关,他也要把那门课整个学下来.做毕业论文那阵子,他桌上堆了一堆关于C语言的书,我问他为什么看这些书,他说写论文时遇到一个问题,而计量软件没有解决这个问题所需的功能,所以他打算自己学编程

[hihoCoder] 第五十二周: 连通性&#183;一

题目1 : 连通性·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 还记得上次小Hi和小Ho学校被黑客攻击的事情么,那一次攻击最后造成了学校网络数据的丢失.为了避免再次出现这样的情况,学校决定对校园网络进行重新设计. 学校现在一共拥有N台服务器(编号1..N)以及M条连接,保证了任意两台服务器之间都能够通过连接直接或者间接的数据通讯. 当发生黑客攻击时,学校会立刻切断网络中的一条连接或是立刻关闭一台服务器,使得整个网络被隔离成两个独立的部分. 举个例子,对于以下