【图论】【Kosaraju】刻录光盘(ssl 2344)
刻录光盘
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)相关推荐
- SSL 2344 洛谷 2835 信息学奥赛一本通 1383 刻录光盘#floyd,tarjan,kosaraju#
洛谷请关掉优化 题目 求有多少个连通块 分析 floyd+并查集 floyd代码 #include <cstdio> #include <cctype> #include &l ...
- 【SSL】2344 【洛谷】2835刻录光盘
[SSL]2344 &[洛谷]2835刻录光盘 Time Limit:1000MS Memory Limit:65536K Description 在PJOI2010夏令营快要结束的时候,很多 ...
- 【图论】【并查集】矩形(ssl 1222)
矩形 ssl 1222 题目大意: 有n个矩阵,现在将有重叠部分的两个矩阵合并成一个图形,问有多少个图形 原题: 题目描述 在一个平面上有n个矩形.每个矩形的边都平行于坐标轴并且都具有值为整数的顶点. ...
- 【并查集】【图论】旅行(ssl 1312)
旅行 ssl 1312 题目大意: 有一个图,要从一个点到另一个点,问路上的最大值和最小值的比最小是多少 原题: 题目描述 Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有 ...
- 【并查集】【图论】【最小生成树】剑鱼行动(ssl 1618)
剑鱼行动 ssl 1618 题目大意: 求一个平面直角坐标系中的最小生成树 原题: 题目描述 给出N个点的坐标,对它们建立一个最小生成树,代价就是连接它们的路径的长度,现要求总长度最小.N的值在100 ...
- 【图论】最短路上的统计(ssl 1500)
最短路上的统计 ssl 1500 题目大意: 求一个图中,从a到b的所有最短路所经过的点数之和 原题: 题目描述 一个无向图上,没有自环,所有边的权值均为1,对于一个点对(a,b),我们要把所有a与b ...
- 【图论】【高精】产生数(ssl 1021/ luogu 1037)
产生数 ssl 1021 luogu 1037 题目大意: 有一个数,可以使某些数字变成相对应的数字,问有多少种变法 原题: Description 给出一个整数 n(n<10^30) 和 k ...
- 【图论】【最短路】【Dijkstra】最小花费(ssl 2206/luogu 1576)
最小花费 ssl 2206 luogu 1576 题目大意: 有n个人,他们之间有m对人可以相互{\color{red}相互}相互转账,但要收一定的税,求第x个人转给第y个人至少要多少钱 Descri ...
- 【最短路】【图论】【Floyed】牛的旅行(ssl 1119/luogu 1522)
牛的旅行 ssl 1119 luogu 1522 题目大意 有两堆点,每一堆点之中的任何两个点都一定有相连的路线,连接两堆点中的各一个点,使最远的两个点的距离最短 原题 农民John的农场里有很多牧区 ...
最新文章
- 2021重庆江北中学高考成绩查询,重庆江北中学校2021年排名
- NASA投资有远景技术,有望改变未来人类和机器人的勘探任务
- anaconda在ubuntu中安装后没有_听说90后的现状,并没有想象中那么美好!
- Ubuntu 9.10下载地址
- 001_ZooKeeper简介
- PHP自动加载类的实例
- IOS Core Animation Advanced Techniques的学习笔记(五)
- Java进阶:ReentrantLock实现原理解析(公平锁、非公平锁、可重入锁、自旋锁)
- 我们真的需要JWT吗?
- 《Android深度探索》(卷1)HAL与驱动开发 第十章心得体会
- Spring+hibernate无法执行更新操作
- 详解:Oracle数据库的分区表
- ie手机浏览器_哪款浏览器可以说成为装机必备?
- 两种方式打开jar文件
- IP切换器哪个最好用?
- PICkits3调试功能
- 特征检测和特征提取算子
- python之if-else_Python中的if-else
- 企业建站有必要使用高防服务器吗?
- 支付宝wap支付配置应用公钥/应用私钥
热门文章
- # 保持最外层获取焦点_大事件!沈阳爱尔白内障焕晶诊疗中心正式启用,两位PanOptix三焦点人工晶体植入患者清晰见证!...
- leetcode404. 左叶子之和
- leetcode206:反转链表
- 7-25 朋友圈 (25 分)(详解+并查集的了解和应用)
- 什么事计算机事实性知识,《人工智能》复习要点
- [Redis6]配置文件详解
- C++ class实现邻接矩阵存储的图(完整代码)
- 二分+01分数规划+最大化平均值 Dropping tests POJ - 2976
- Coins POJ - 1742(多重背包+是否装满问题)
- 广义表的学习(原理和代码)