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

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

Sample Output

1

题解

  • 题目其实就是让我们求有多少个联通块
  • 那么其实我们将给出的边定为true
  • 跑一遍Floyd,可以将可以达到的点全部跑出来
  • 然后,将这些边打进并查集
  • 最后求有多少个并查集

代码

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 int n,ans,f[210],v[210][210],a[210];
 5 void bing(int x,int y)
 6 {
 7     while (x!=f[x]) x=f[x];
 8     f[y]=x;
 9 }
10 int getfather(int x)
11 {
12     while (x!=f[x]) x=f[x];
13     return x;
14 }
15 int main()
16 {
17     scanf("%d",&n);
18     for (int i=1;i<=n;i++) f[i]=i;
19     for (int i=1;i<=n;i++)
20     {
21         int x;
22         scanf("%d",&x);
23         while (x!=0)
24         {
25             v[i][x]=true;
26             scanf("%d",&x);
27         }
28     }
29     for (int k=1;k<=n;k++)
30         for (int i=1;i<=n;i++)
31             for (int j=1;j<=n;j++)
32                 v[i][j]=v[i][j]||v[i][k]&&v[k][j];
33     for (int i=1;i<=n;i++)
34         for (int j=1;j<=n;j++)
35             if (v[i][j])
36                 bing(i,j);
37     for (int i=1;i<=n;i++) a[getfather(i)]=1;
38     for (int i=1;i<=n;i++) if (a[i]==1) ans++;
39     printf("%d",ans);
40     return 0;
41 }

转载于:https://www.cnblogs.com/Comfortable/p/8574443.html

[最短路-Floyd][并查集]SSL P2344 刻录光盘相关推荐

  1. nssl1454-最短路【并查集,贪心】

    正题 题目大意 nnn个点,每个点可以走到[ai,n][a_i,n][ai​,n],每个点可以从[bi,n][b_i,n][bi​,n]到达. 求disi,j∗(i+j)dis_{i,j}*(i+j) ...

  2. #并查集#SSL 2342 信息学奥赛一本通 1386 打击犯罪

    信息学奥赛一本通链接 题目 求最少打击的团伙数,并且使最大的团伙危险程度不超过n/2. 分析 从nnn到111逆向枚举,每次把点kkk加入图中,也就是删掉1∼k−11\sim k-11∼k−1,剩余k ...

  3. 图论(最短路,最小生成树,并查集)

    本文目录: tarjan算法(判断环) 最小生成树(Kruskal算法) 最小生成树(Prim算法) 优先队列实现dijkstra(最短路) 并查集(求环) floyd(弗洛伊德) (最短路) 判断环 ...

  4. codeforces 400D Dima and Bacteria 并查集+floyd

    题目链接:http://codeforces.com/problemset/problem/400/D 题目大意: 给定n个集合,m步操作,k个种类的细菌, 第二行给出k个数表示连续的xi个数属于i集 ...

  5. AcWing4084 号码牌 (并查集 / bitset优化Floyd)

    题目链接: 号码牌 大致题意 给定一个长度为nnn的序列, 第iii个位置的值为aia_iai​. (保证aaa是111~nnn的一个排列) 每个位置还有一个值did_idi​, 若满足∣i−j=di ...

  6. WOJ 1542 Countries 并查集转化新点+最短路

    http://acm.whu.edu.cn/land/problem/detail?problem_id=1542 今天做武大的网赛题,哎,还是不够努力啊,只搞出三个 这个题目一看就是个最短路,但是题 ...

  7. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  8. BZOJ 2143 飞飞侠(线段树优化建边 / 并查集优化最短路)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2143 是 hydro 的 BZOJ ...

  9. bzoj4144 [AMPPZ2014]Petrol 图论 最短路 并查集

    bzoj4144 [AMPPZ2014]Petrol 图论 最短路 并查集 1.这道题我们主要就是要求出距离一个油站的最近的油站 首先我们dijkstra 求出任意一个点到 离他最近的油站的距离 2. ...

最新文章

  1. 结对项目开发电梯调度 - 整体设计
  2. 【数据挖掘】分类任务简介 ( 分类概念 | 分类和预测 | 分类过程 | 训练集 | 测试集 | 数据预处理 | 有监督学习 )
  3. 【正一专栏】春日随感—赢在起跑线上
  4. Gradient Boost 算法流程分析
  5. [翻译]load-on-startup 元素的作用
  6. windbg 查看结构体_用WinDbg进行调试
  7. Oracle Caused by: java.sql.SQLException: sql injection violation, syntax error: syntax error, expect
  8. ATEN—第九章OSPF多区域的配置
  9. 在 IE 中使用 HTML5 元素
  10. log4j+mybatis打印日志文件
  11. 【cocos2d-x从c++到js】13:回调函数2——JSCallbackWrapper
  12. java泛型为类类型_Java泛型:仅定义为返回类型的通用类型
  13. (5) IFC 总体架构 (Industry Foundation Class)
  14. redis实现周边景点由近到远排序
  15. Python培训包食宿
  16. vue + element插件Popover弹出框
  17. 心情日记:【原创诗歌】怆情吟
  18. 在图片上加滚动文字html,如何让文字在图片上滚动
  19. 如何成为Web开发人员—编写第一个Web应用程序
  20. 开启人工智能的大门,引领AI时代

热门文章

  1. DedeCms的SEO优化全攻略
  2. 苹果付费app共享公众号_【苹果付费APP共享】 Affinity Photo
  3. 网络安全信息与动态周报(8月30日-9月5日)
  4. APP测试面试题汇总
  5. python quit()讲解_Python locals.QUIT属性代码示例
  6. discuz论坛怎么去掉标题和底部powered by discuz方法
  7. 可视门铃全国产化电子元件推荐方案
  8. Linux内核转储---Kdump,Crash使用介绍
  9. 【人工智能】未来三年(2018-2020),我们在新一代人工智能产业能做什么
  10. 虚拟机无法启动提示give root password for maintenance的多种解决方法