刻录光盘

ssl 2344

题目大意:

求连通块

原题:

题目描述

在JSOI2005夏令营快要结束的时候,很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家,以便大家回去后继续学习。组委会觉得这个主意不错!可是组委会一时没有足够的空光盘,没法保证每个人都能拿到刻录上资料的光盘,又来不及去买了,怎么办呢?!
组委会把这个难题交给了LHC,LHC分析了一下所有营员的地域关系,发现有些营员是一个城市的,其实他们只需要一张就可以了,因为一个人拿到光盘后,其他人可以带着U盘之类的东西去拷贝啊!
可是,LHC调查后发现,由于种种原因,有些营员并不是那么的合作,他们愿意某一些人到他那儿拷贝资料,当然也可能不愿意让另外一些人到他那儿拷贝资料,这与我们JSOI宣扬的团队合作精神格格不入!!!
现在假设总共有N个营员(2<=N<=200),每个营员的编号为1~N。LHC给每个人发了一张调查表,让每个营员填上自己愿意让哪些人到他那儿拷贝资料。当然,如果A愿意把资料拷贝给B,而B又愿意把资料拷贝给C,则一旦A获得了资料,则B,C都会获得资料。
现在,请你编写一个程序,根据回收上来的调查表,帮助LHC计算出组委会至少要刻录多少张光盘,才能保证所有营员回去后都能得到夏令营资料?

输入输出格式

输入格式:

先是一个数N,接下来的N行,分别表示各个营员愿意把自己获得的资料拷贝给其他哪些营员。即输入数据的第i+1行表示第i个营员愿意把资料拷贝给那些营员的编号,以一个0结束。如果一个营员不愿意拷贝资料给任何人,则相应的行只有1个0,一行中的若干数之间用一个空格隔开。

输出格式:

一个正整数,表示最少要刻录的光盘数。

输入输出样例

输入样例:

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

输出样例:

1

解题思路:

用Kosaraju算法,先跑一遍Dfs,然后按推出顺序(反过来)跑Dfs,跑了几遍就是有几个环(要判断有没有到过)

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n,x,w,num,ans,head[205],v[205],p[205];
struct rec
{int to,next;
}a[40005];
void dfs1(int dep)//第一次
{p[dep]=1;//记录for (int i=head[dep];i;i=a[i].next)if (!p[a[i].to])dfs1(a[i].to);//Dfsv[++num]=dep; //记录
}
void dfs2(int dep)
{p[dep]=1;for (int i=head[dep];i;i=a[i].next)if (!p[a[i].to])dfs2(a[i].to);
}
int main()
{scanf("%d",&n);for (int i=1;i<=n;++i)while (scanf("%d",&x),x){a[++w].to=x;a[w].next=head[i];head[i]=w;}for (int i=1;i<=n;++i)if (!p[i])dfs1(i);memset(p,0,sizeof(p));for (int i=n;i>0;--i)//按反过来的退出顺序if (!p[v[i]])//到过没{dfs2(v[i]);ans++;}printf("%d",ans);
}

【图论】【Kosaraju】刻录光盘(ssl 2344)相关推荐

  1. SSL 2344 洛谷 2835 信息学奥赛一本通 1383 刻录光盘#floyd,tarjan,kosaraju#

    洛谷请关掉优化 题目 求有多少个连通块 分析 floyd+并查集 floyd代码 #include <cstdio> #include <cctype> #include &l ...

  2. 【SSL】2344 【洛谷】2835刻录光盘

    [SSL]2344 &[洛谷]2835刻录光盘 Time Limit:1000MS Memory Limit:65536K Description 在PJOI2010夏令营快要结束的时候,很多 ...

  3. 【图论】【并查集】矩形(ssl 1222)

    矩形 ssl 1222 题目大意: 有n个矩阵,现在将有重叠部分的两个矩阵合并成一个图形,问有多少个图形 原题: 题目描述 在一个平面上有n个矩形.每个矩形的边都平行于坐标轴并且都具有值为整数的顶点. ...

  4. 【并查集】【图论】旅行(ssl 1312)

    旅行 ssl 1312 题目大意: 有一个图,要从一个点到另一个点,问路上的最大值和最小值的比最小是多少 原题: 题目描述 Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有 ...

  5. 【并查集】【图论】【最小生成树】剑鱼行动(ssl 1618)

    剑鱼行动 ssl 1618 题目大意: 求一个平面直角坐标系中的最小生成树 原题: 题目描述 给出N个点的坐标,对它们建立一个最小生成树,代价就是连接它们的路径的长度,现要求总长度最小.N的值在100 ...

  6. 【图论】最短路上的统计(ssl 1500)

    最短路上的统计 ssl 1500 题目大意: 求一个图中,从a到b的所有最短路所经过的点数之和 原题: 题目描述 一个无向图上,没有自环,所有边的权值均为1,对于一个点对(a,b),我们要把所有a与b ...

  7. 【图论】【高精】产生数(ssl 1021/ luogu 1037)

    产生数 ssl 1021 luogu 1037 题目大意: 有一个数,可以使某些数字变成相对应的数字,问有多少种变法 原题: Description 给出一个整数 n(n<10^30) 和 k ...

  8. 【图论】【最短路】【Dijkstra】最小花费(ssl 2206/luogu 1576)

    最小花费 ssl 2206 luogu 1576 题目大意: 有n个人,他们之间有m对人可以相互{\color{red}相互}相互转账,但要收一定的税,求第x个人转给第y个人至少要多少钱 Descri ...

  9. 【最短路】【图论】【Floyed】牛的旅行(ssl 1119/luogu 1522)

    牛的旅行 ssl 1119 luogu 1522 题目大意 有两堆点,每一堆点之中的任何两个点都一定有相连的路线,连接两堆点中的各一个点,使最远的两个点的距离最短 原题 农民John的农场里有很多牧区 ...

最新文章

  1. 2021重庆江北中学高考成绩查询,重庆江北中学校2021年排名
  2. NASA投资有远景技术,有望改变未来人类和机器人的勘探任务
  3. anaconda在ubuntu中安装后没有_听说90后的现状,并没有想象中那么美好!
  4. Ubuntu 9.10下载地址
  5. 001_ZooKeeper简介
  6. PHP自动加载类的实例
  7. IOS Core Animation Advanced Techniques的学习笔记(五)
  8. Java进阶:ReentrantLock实现原理解析(公平锁、非公平锁、可重入锁、自旋锁)
  9. 我们真的需要JWT吗?
  10. 《Android深度探索》(卷1)HAL与驱动开发 第十章心得体会
  11. Spring+hibernate无法执行更新操作
  12. 详解:Oracle数据库的分区表
  13. ie手机浏览器_哪款浏览器可以说成为装机必备?
  14. 两种方式打开jar文件
  15. IP切换器哪个最好用?
  16. PICkits3调试功能
  17. 特征检测和特征提取算子
  18. python之if-else_Python中的if-else
  19. 企业建站有必要使用高防服务器吗?
  20. 支付宝wap支付配置应用公钥/应用私钥

热门文章

  1. # 保持最外层获取焦点_大事件!沈阳爱尔白内障焕晶诊疗中心正式启用,两位PanOptix三焦点人工晶体植入患者清晰见证!...
  2. leetcode404. 左叶子之和
  3. leetcode206:反转链表
  4. 7-25 朋友圈 (25 分)(详解+并查集的了解和应用)
  5. 什么事计算机事实性知识,《人工智能》复习要点
  6. [Redis6]配置文件详解
  7. C++ class实现邻接矩阵存储的图(完整代码)
  8. 二分+01分数规划+最大化平均值 Dropping tests POJ - 2976
  9. Coins POJ - 1742(多重背包+是否装满问题)
  10. 广义表的学习(原理和代码)