POJ 1236 Network of Schools (Tarjan)
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 22745 | Accepted: 8929 |
Description
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
Output
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)的更多相关文章
- POJ 1236 Network of Schools(tarjan)
Network of Schools Description A number of schools are connected to a computer network. Agreements h ...
- POJ 1236 Network of Schools(tarjan)题解
题意:一个有向图.第一问:最少给几个点信息能让所有点都收到信息.第二问:最少加几个边能实现在任意点放信息就能传遍所有点 思路:把所有强连通分量缩成一点,然后判断各个点的入度和出度 tarjan算法:问 ...
- 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(tarjan+缩点)
Network of Schools Description A number of schools are connected to a computer network. Agreements h ...
- POJ 1236 Network of Schools(tarjan求强连通分量+思维)
题目链接:http://poj.org/problem?id=1236 题目大意: 给你一个网络(有向图),有两个任务: ①求出至少同时需要几份副本可以使得整个网络都获得副本 ②至少添加多少信息表(有 ...
- POJ 1236 Network of Schools(tarjan算法 + LCA)
这个题目网上有很多答案,代码也很像,不排除我的.大家的思路应该都是taijan求出割边,然后找两个点的LCA(最近公共祖先),这两个点和LCA以及其他点构成了一个环,我们判断这个环上的割边有几条,我们 ...
- POJ 1236 Network of Schools (tarjan算法+缩点)
思路:使用tarjan求强连通分量并进行缩点,判断所有入度为0的点,这个点就是必须要给予文件的点,分别计算出度,入度为零的点的个数,取二者的最大值就是把这个图变成强连通需要加的边数. 一个取值需要讨论 ...
- poj 1236 Network of Schools(连通图)
题目链接:http://poj.org/problem?id=1236 题目大意:有一些学校,学校之间可以进行收发邮件,给出学校的相互关系,问:1.至少 要向这些学校发送多少份才能使所有的学校都能获得 ...
- POJ 1236.Network of Schools (强连通)
首先要强连通缩点,统计新的图的各点的出度和入度. 第一问直接输出入度为0的点的个数 第二问是要是新的图变成一个强连通图,那么每一个点至少要有一条出边和一条入边,输出出度和入度为0的点数大的那一个 注意 ...
随机推荐
- JSP从入门到精通
1. jsp开发环境配置 在windows下配置jsp的开发环境: 假设已经安装好了jdk,下面来配置tomcat 去http://tomcat.apache.org 下载tomcat windows ...
- Apache的commons工具类
package cn.zhou; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileU ...
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.mybatis.spring.mapper.MapperScannerConfigurer#0'
七月 05, 2018 10:26:54 上午 org.apache.tomcat.util.digester.SetPropertiesRule begin警告: [SetPropertiesRul ...
- Linux下 rewrite_mod 的配置
以下使用最新的 Ubuntu 16.04 测试; 安装好apache后先确认有没有rewrite模块,大多数情况下是有的:ls /etc/apache2/mods-available |grep re ...
- Maven最佳实战
Maven中内置的隐藏变量: http://www.cnblogs.com/quanyongan/category/471332.html Maven提供了三个隐式的变量可以用来访问环境变量,POM信 ...
- How to convert mkv to mp4 lossless
ffmpeg -i example.mkv -vcodec copy -acodec copy example.mp4
- zookeeper客户端操作
ZooKeeper客户端 zkCli.sh 节点的增删改查 在 bin 目录下的 zkCli.sh 就是ZooKeeper客户端 ./zkCli.sh -timeout 5000 -server ...
- WC2019游记 && 课件
WC2019 游记 课件 wc2019.zip_免费高速下载|百度网盘-分享无限制 提取码: un6z day 0 打飞机去广州... 在飞机上刷了爱乐(le)之城, 相当好看... 广二好大! 哈三 ...
- Java之视频读取IO流解帧实施方案
获取视频处理对象的方式有很多,读取本地文件.读取url.读取摄像头等,而直接读流解析视频的实施方案却难以寻觅.此处有两种方案处理视频流(此处设定场景为用户上传视频,同时两种方式均需服务端安装ffmpe ...
- luogu P1077 摆花
这道题看似好难,但是其实很简单 先把题目中所让你设的变量都设好,该输入的都输入 你会发现这道题好像成功了一半,为什么呢??? 因为设完后你会发现你不需要再添加任何变量,已经足够了. 可能最难的地方,就 ...