洛谷P2812 校园网络[数据加强版] [Tarjan]
校园网络
题目背景
浙江省的几所OI强校的神犇发明了一种人工智能,可以AC任何题目,所以他们决定建立一个网络来共享这个软件。但是由于他们脑力劳动过多导致全身无力身体被♂掏♂空,他们来找你帮助他们。
题目描述
共有n所学校(n<=10000)已知他们实现设计好的网络共m条线路,为了保证高速,网络是单向的。现在请你告诉他们至少选几所学校作为共享软件的母机母鸡,能使每所学校都可以用上。再告诉他们至少要添加几条线路能使任意一所学校作为母机母鸡都可以使别的学校使用上软件。
输入输出格式
输入格式:
第一行一个整数n。
接下来n行每行有若干个整数,用空格空格隔开。
第i-1行的非零整数x,表示从i到x有一条线路。以0作为结束标志。
输出格式:
第一行一个整数表示问题1的答案。
第二行回答问题2.
输入输出样例
5
2 0
4 0
5 0
1 0
0
2
2
说明
POJ原题。数据扩大了100倍。
边数 $\leq 5000000$
分析:
$Tarjan$裸题。
因为在一个强连通分量中的电脑可以相互传递信息,所以可以缩点。所点以后在重建边,此时整张图可能是一个非连通图,那么我们就查询有哪些点入度为$0$,这些点就是母机(母鸡)。然后我们再找入度为$0$的点和出度为$0$的点,取$max$就可以得到第二问的答案。因为只要把出度为$0$的点与入度为$0$的点依次连接就可以形成一个大环,这样就能保证所有计算机都能相互到达了。(不过要特判只有一个强连通分量的情况,只有一个强连通分量的话就不需要再连边,第二问答案也就是$0$)
Code:
//It is made by HolseLee on 20th Aug 2018
//Luogu.org P2812
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<stack>
#define Max(a,b) (a)>(b)?(a):(b)
#define Min(a,b) (a)<(b)?(a):(b)
using namespace std; const int N=1e4+;
int n,dfn[N],low[N],belong[N],scc,ans,idx,ru[N],chu[N];
bool vis[N];
vector<int>e[N];
stack<int>sta; inline int read()
{
char ch=getchar();int num=;bool flag=false;
while(ch<''||ch>''){if(ch=='-')flag=true;ch=getchar();}
while(ch>=''&&ch<=''){num=num*+ch-'';ch=getchar();}
return flag?-num:num;
} void tarjan(int u)
{
dfn[u]=low[u]=++idx;
vis[u]=true;sta.push(u);
int v;
for(int i=;i<e[u].size();++i){
v=e[u][i];
if(!dfn[v]){
tarjan(v);
low[u]=Min(low[u],low[v]);
}else if(vis[v]){
low[u]=Min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u]){
scc++;
do{
v=sta.top();sta.pop();
vis[v]=false;belong[v]=scc;
}while(v!=u);
}
} int main()
{
n=read();
int x;
for(int i=;i<=n;++i){
x=read();
while(x){
e[i].push_back(x);
x=read();
}
}
for(int i=;i<=n;++i)
if(!dfn[i])tarjan(i);
for(int i=;i<=n;++i)
for(int j=;j<e[i].size();++j){
if(belong[i]!=belong[e[i][j]])
++chu[belong[i]],++ru[belong[e[i][j]]];
}
for(int i=;i<=scc;++i)
if(!ru[i])++ans;
printf("%d\n",ans);
int tot=;
for(int i=;i<=scc;++i)
if(!chu[i])++tot;
ans=Max(ans,tot);
if(scc==)ans=;
printf("%d\n",ans);
return ;
}
洛谷P2812 校园网络[数据加强版] [Tarjan]的更多相关文章
- 洛谷 P2812 校园网络【[USACO]Network of Schools加强版】  解题报告
		
P2812 校园网络[[USACO]Network of Schools加强版] 题目背景 浙江省的几所OI强校的神犇发明了一种人工智能,可以AC任何题目,所以他们决定建立一个网络来共享这个软件.但是 ...
 - 洛谷—— P2812 校园网络
		
P2812 校园网络 题目背景 浙江省的几所OI强校的神犇发明了一种人工智能,可以AC任何题目,所以他们决定建立一个网络来共享这个软件.但是由于他们脑力劳动过多导致全身无力身体被♂掏♂空,他们来找你帮 ...
 - 洛谷P2812校园网络【Network of Schools加强版】
		
题目背景 浙江省的几所\(OI\)强校的神犇发明了一种人工智能,可以\(AC\)任何题目,所以他们决定建立一个网络来共享这个软件.但是由于他们脑力劳动过多导致全身无力身体被\(♂\)掏\(♂\)空,他 ...
 - 洛谷P2812校园网络
		
传送门啦 其实这个题只要读懂分析好题意就不是很难. 就是将一个有向图进行缩点操作,把一个强连通分量看成一个点,求入度为 0 的点和出度为 0 的点各有多少. 在这里先向大家推荐两个题目,建议大家先去看 ...
 - 洛谷P1120 小木棍 [数据加强版](搜索)
		
洛谷P1120 小木棍 [数据加强版] 搜索+剪枝 [剪枝操作]:若某组拼接不成立,且此时 已拼接的长度为0 或 当前已拼接的长度与刚才枚举的长度之和为最终枚举的答案时,则可直接跳出循环.因为此时继续 ...
 - 洛谷 P1120 小木棍[数据加强版]
		
这道题可能是我做过的数据最不水的一道题-- 题目传送门 这题可以说是神剪枝,本身搜索并不算难,但剪枝是真不好想(好吧,我承认我看了题解)-- 剪枝: 用桶来存储木棍 在输入的时候记录下最长的木棍和最短 ...
 - 洛谷 P2194 HXY烧情侣【Tarjan缩点】 分析+题解代码
		
洛谷 P2194 HXY烧情侣[Tarjan缩点] 分析+题解代码 题目描述: 众所周知,HXY已经加入了FFF团.现在她要开始喜(sang)闻(xin)乐(bing)见(kuang)地烧情侣了.这里 ...
 - 洛谷 P1546 最短网络 Agri-Net
		
题目链接 https://www.luogu.org/problemnew/show/P1546 题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当 ...
 - 洛谷1726 上白泽慧音 tarjan模板
		
题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点.人间 ...
 
随机推荐
- 简单实现VUE的双向数据绑定
			
<!DOCTYPE html> <html> <head> <title>vue-双向数据绑定的简单实现</title> </head ...
 - hdu 1907 John (anti—Nim)
			
John Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)http://acm.h ...
 - HDU 4778 状压DP
			
一看就是状压,由于是类似博弈的游戏.游戏里的两人都是绝对聪明,那么先手的选择是能够确定最终局面的. 实际上是枚举最终局面情况,0代表是被Bob拿走的,1为Alice拿走的,当时Alice拿走且满足变换 ...
 - 如何构建一个很棒网站页脚(Website Footer)
			
对于很多人来说,制作页脚是只是设计师顺手而为的任务.它似乎很容易,似乎可以忽略不计.因为很多人都觉得网站底部很少人会去看,而且页脚链接的所有链接的点击率(CTR)都是最低的,何必呢? 真是这样的吗?下 ...
 - CSS中filter滤镜的学习笔记
			
1.CSS静态滤镜样式 (filter)(只有IE4.0以上支持) CSS静态滤镜样式的使用方法:{ filter : filtername( parameters1, parameters2, . ...
 - NYOJ    208    Supermarket   (模拟+并查集)
			
题目链接 描述 A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Pr ...
 - Chrome浏览器任意修改网页内容
			
在Chrome浏览器按F12,打开开发者工具,切换到console选项卡: 在下面的输入行输入下面的命令回车: document.body.contentEditable="true&quo ...
 - Verilog笔记.2.数字逻辑电路
			
1.数字逻辑电路的种类:1) 组合逻辑:输出只是当前输入逻辑电平的函数(有延时),与电路的原始状态无关的逻辑电路.也就是说,当输入信号中的任何一个发生变化时,输出都有可能会根据其变化而变化,但与电路目 ...
 - 黑色的cms商城网站后台管理模板——后台
			
链接:http://pan.baidu.com/s/1hst6Lbm 密码:9ad7
 - linux自动创建dev node
			
通过驱动模块的加载在/dev下创建设备文件,在驱动模块卸载时又自动的删除在/dev下创建的设备文件非常方便.而这个过程就是通过device_create()和device_destroy()内核函数完 ...