题目背景

浙江省的几所OI强校的神犇发明了一种人工智能,可以AC任何题目,所以他们决定建立一个网络来共享这个软件。但是由于他们脑力劳动过多导致全身无力身体被♂掏♂空,他们来找你帮助他们。

题目描述

共有n所学校(n<=10000)已知他们实现设计好的网络共m条线路,为了保证高速,网络是单向的。现在请你告诉他们至少选几所学校作为共享软件的母机母鸡,能使每所学校都可以用上。再告诉他们至少要添加几条线路能使任意一所学校作为母机母鸡都可以使别的学校使用上软件。

输入输出格式

输入格式:

第一行一个整数n。

接下来n行每行有若干个整数,用空格空格隔开。

第i-1行的非零整数x,表示从i到x有一条线路。以0作为结束标志。

输出格式:

第一行一个整数表示问题1的答案。

第二行回答问题2.

输入输出样例

输入样例#1:

5
2 0
4 0
5 0
1 0
0
输出样例#1:

2
2

说明

POJ原题。数据扩大了100倍。

边数 ≤5000000

Solution:

  本题zyys(吐槽:数据加强?我先做的加强版,蒯了AC代码去普通版WA了,原因不说了)。

  思路:tarjan缩点。

  对于第1问,我们求出缩点后的各连通图中入度为0的点的个数就行了。

  对于第2问,等价于使得缩点后的各连通图中的每个点的出入度至少为1,不必考虑具体建图的过程(实际是出度为0连向入度为0,构成环),反正答案就是$\max$(入度为0个数,出度为0个数)。

代码:

/*Code by 520 -- 8.21*/
#include<bits/stdc++.h>
#define il inline
#define ll long long
#define RE register
#define For(i,a,b) for(RE int (i)=(a);(i)<=(b);(i)++)
#define Bor(i,a,b) for(RE int (i)=(b);(i)>=(a);(i)--)
using namespace std;
const int N=,M=;
struct node{
int u,v;
}e[M];
int n,m,tot,dfn[N],low[N];
int to[M],net[M],h[N],cnt,la;
int stk[N],top,scc,bl[N],cd[N],rd[N];
int ans1,ans2;
bool ins[N]; int gi(){
int a=;char x=getchar();
while(x<''||x>'')x=getchar();
while(x>=''&&x<='')a=(a<<)+(a<<)+(x^),x=getchar();
return a;
} il void add(int u,int v){to[++cnt]=v,net[cnt]=h[u],h[u]=cnt;} void tarjan(int u){
dfn[u]=low[u]=++tot,stk[++top]=u,ins[u]=;
for(RE int i=h[u];i;i=net[i]){
int v=to[i];
if(!dfn[v]) tarjan(v),low[u]=min(low[u],low[v]);
else if(ins[v]) low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u]){
scc++;
while(stk[top+]!=u)
bl[stk[top]]=scc,ins[stk[top--]]=;
}
} il void init(){
n=gi();
RE int v;
For(i,,n)
while(){
v=gi();
if(!v)break;
add(i,v),e[++la].u=i,e[la].v=v;
}
For(i,,n) if(!dfn[i]) tarjan(i);
memset(h,,sizeof(h)),cnt=;
if(scc==)cout<<<<'\n'<<,exit();
For(i,,la) if(bl[e[i].u]!=bl[e[i].v]) cd[bl[e[i].u]]++,rd[bl[e[i].v]]++;
For(i,,scc) {
if(!rd[i]) ans1++;
if(!cd[i]) ans2++;
}
printf("%d\n%d",ans1,max(ans1,ans2));
} int main(){
init();
return ;
}

最新文章

  1. Mac OS使用brew安装Nginx、MySQL、PHP-FPM的LAMP开发环境
  2. debian(kali Linux) 安装net Core
  3. caffe 试运行MNIST
  4. 【kd-tree】bzoj4154 [Ipsc2015]Generating Synergy
  5. json中头疼的null
  6. cannot load supported formats intellij 解决的方法
  7. 如何在 Windows Phone 8 中获取手机的当前位置
  8. Your data vis “Spidey-sense” &amp; the need for a robust “utility belt”
  9. ADO.NET复习总结(2)--连接池
  10. JSONP &amp;&amp; CORS
  11. 金三银四,如何征服面试官,拿到Offer
  12. JDK1.8 HashMap源码分析
  13. Eclipse java文件、包、工程左下角有感叹号原因及处理方法
  14. ES6标准简介之Babel转码器解说
  15. React-Native 之 ScrollView介绍和使用
  16. Leetcode 234 Palindrome Linked List 复杂度为时间O(n) 和空间(1)解法
  17. SQL-order by两个字段同时排序
  18. Spring MVC controller的方法返回值
  19. [转]如何使用Fiddler抓取指定浏览器的数据包
  20. linux提权辅助工具(二):linux-exploit-suggester-2.pl

热门文章

  1. 【NOIP2018pj】题解
  2. Ceph学习之路(一)之ceph初识
  3. Windows server 2008 IIS7发布asp.net mvc网站css、js脚本无法访问 问题解决
  4. TMDXEVM6678L EVM开发板初使用(1)
  5. 非Contorller类使用@Service中的方法
  6. 详细讲解 A/B 测试关键步骤,快来检查下还有哪些疏漏的知识点
  7. 第六篇 native 版本的Postman如何通过代理服务器录制Web及手机APP请求
  8. eclipse集成testng插件(离线安装方式)
  9. thinkphp5登录并保存session、根据不同用户权限跳转不同页面
  10. asp之GetArray提取链接地址,以$Array$分隔的代码