
【SSL 2344】[洛谷P2835]刻录光盘【图的连通性 / 连通块】
发布日期:2021-05-06 18:47:53
浏览次数:19
分类:精选文章
本文共 1257 字,大约阅读时间需要 4 分钟。
Description
在PJOI2010夏令营快要结束的时候,很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家,以便大家回去后继续学习。组委会觉得这个主意不错!可是组委会一时没有足够的空光盘,没法保证每个人都能拿到刻录上资料的光盘,又来不及去买了,怎么办呢?
组委会把这个难题交给了DYJ,DYJ分析了一下所有营员的地域关系,发现有些营员是一个城市的,其实他们只需要一张就可以了,因为一个人呢拿到光盘以后,其他人可以拿着U盘之类的东西去拷贝啊!
可是DYJ调查后发现,有些营员并不是那么合作,他们愿意某一些人到他那儿拷贝资料,当然也可能不愿意让另外一些人到他那儿拷贝资料,这与我们PJOI宣扬的团队合作精神格格不入!
现在假设总共有N个营员(2<=N<=200),每个营员的编号为1~N。DJY给每个人发了一张调查表,让每个营员填上自己愿意让哪些人到他那儿拷贝资料。当然,如果A愿意把资料拷贝给B,而B又愿意把资料拷贝给C,则一旦A获得了资料,则B、C也会获得资料。
现在请你编写一个程序,根据回收上来的调查表,帮助DZY计算出组委会至少要刻录多少张光盘,才能保证所有营员回去后都能得到夏令营资料?
Input
先是一个数N,接下来N行,分别表示各个营员愿意把自己获得的资料拷贝给其他哪些营员。即输入数据的第N+1行表示第i个营员愿意把资料拷贝给那些营员编号,以一个0结束。如果一个营员不愿意拷贝资料给任何人,则相应的行只有1个0,一行中的若干数之间用一个空格隔开。
Output
一个正整数,表示最少要刻录的光盘数。
Sample Input
52 4 3 04 5 0001 0
Sample Output
1
分析&说明:
这道题仔细理解就可以知道:其实是求该图中有几个连通块,先用弗洛伊德判断是否连通,再统计数量即可。
代码实现:
#include#include #include using namespace std;int n,m,ans,f[201],x,a[201][201];int main(){ cin>>n; for (int i=1;i<=n;i++) { while(cin>>x&&x) a[i][x]=1; //标为连通 } for (int k=1;k<=n;k++) for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) a[i][j]=a[i][j]||(a[i][k]&&a[k][j]); //Floyed判断是否连通 for (int i=1;i<=n;i++) f[i]=i; for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) if(a[i][j])/*访问过*/ f[j]=f[i]; for (int i=1;i<=n;i++) if(f[i]==i) ans++; //统计 cout<
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年03月26日 04时58分46秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
“/”应用程序中的服务器错误。
2019-03-05
MUI之ajax获取后台接口数据
2019-03-05
使用sqlserver 查询不连续的数据
2019-03-05
用div+css+html+js 实现图片放大
2019-03-05
(原创)在Linux上安装运行Python3(CentOS7为例)
2019-03-05
变量覆盖漏洞
2019-03-05
weblogic之cve-2015-4852
2019-03-05
Java注释
2019-03-05
水调歌头·1024
2019-03-05
对不起
2019-03-05
C++ 函数重载
2019-03-05
Nginx简介
2019-03-05
Nginx的Gzip功能
2019-03-05
Azure Storage 系列(四)在.Net 上使用Table Storage
2019-03-05
[模板] 带修莫队
2019-03-05
abstract关键字的使用
2019-03-05
算法题:获取一个字符串在另一个字符串中出现的次数
2019-03-05
算法题:获取两个字符串中的最大相同子串
2019-03-05
Asp.Net Core&Jenkins持续交付到Windows Server
2019-03-05