[最短路-Floyd][并查集]SSL P2344 刻录光盘
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 刻录光盘相关推荐
- 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) ...
- #并查集#SSL 2342 信息学奥赛一本通 1386 打击犯罪
信息学奥赛一本通链接 题目 求最少打击的团伙数,并且使最大的团伙危险程度不超过n/2. 分析 从nnn到111逆向枚举,每次把点kkk加入图中,也就是删掉1∼k−11\sim k-11∼k−1,剩余k ...
- 图论(最短路,最小生成树,并查集)
本文目录: tarjan算法(判断环) 最小生成树(Kruskal算法) 最小生成树(Prim算法) 优先队列实现dijkstra(最短路) 并查集(求环) floyd(弗洛伊德) (最短路) 判断环 ...
- codeforces 400D Dima and Bacteria 并查集+floyd
题目链接:http://codeforces.com/problemset/problem/400/D 题目大意: 给定n个集合,m步操作,k个种类的细菌, 第二行给出k个数表示连续的xi个数属于i集 ...
- AcWing4084 号码牌 (并查集 / bitset优化Floyd)
题目链接: 号码牌 大致题意 给定一个长度为nnn的序列, 第iii个位置的值为aia_iai. (保证aaa是111~nnn的一个排列) 每个位置还有一个值did_idi, 若满足∣i−j=di ...
- WOJ 1542 Countries 并查集转化新点+最短路
http://acm.whu.edu.cn/land/problem/detail?problem_id=1542 今天做武大的网赛题,哎,还是不够努力啊,只搞出三个 这个题目一看就是个最短路,但是题 ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- BZOJ 2143 飞飞侠(线段树优化建边 / 并查集优化最短路)【BZOJ修复工程】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2143 是 hydro 的 BZOJ ...
- bzoj4144 [AMPPZ2014]Petrol 图论 最短路 并查集
bzoj4144 [AMPPZ2014]Petrol 图论 最短路 并查集 1.这道题我们主要就是要求出距离一个油站的最近的油站 首先我们dijkstra 求出任意一个点到 离他最近的油站的距离 2. ...
最新文章
- 结对项目开发电梯调度 - 整体设计
- 【数据挖掘】分类任务简介 ( 分类概念 | 分类和预测 | 分类过程 | 训练集 | 测试集 | 数据预处理 | 有监督学习 )
- 【正一专栏】春日随感—赢在起跑线上
- Gradient Boost 算法流程分析
- [翻译]load-on-startup 元素的作用
- windbg 查看结构体_用WinDbg进行调试
- Oracle Caused by: java.sql.SQLException: sql injection violation, syntax error: syntax error, expect
- ATEN—第九章OSPF多区域的配置
- 在 IE 中使用 HTML5 元素
- log4j+mybatis打印日志文件
- 【cocos2d-x从c++到js】13:回调函数2——JSCallbackWrapper
- java泛型为类类型_Java泛型:仅定义为返回类型的通用类型
- (5) IFC 总体架构 (Industry Foundation Class)
- redis实现周边景点由近到远排序
- Python培训包食宿
- vue + element插件Popover弹出框
- 心情日记:【原创诗歌】怆情吟
- 在图片上加滚动文字html,如何让文字在图片上滚动
- 如何成为Web开发人员—编写第一个Web应用程序
- 开启人工智能的大门,引领AI时代
热门文章
- DedeCms的SEO优化全攻略
- 苹果付费app共享公众号_【苹果付费APP共享】 Affinity Photo
- 网络安全信息与动态周报(8月30日-9月5日)
- APP测试面试题汇总
- python quit()讲解_Python locals.QUIT属性代码示例
- discuz论坛怎么去掉标题和底部powered by discuz方法
- 可视门铃全国产化电子元件推荐方案
- Linux内核转储---Kdump,Crash使用介绍
- 【人工智能】未来三年(2018-2020),我们在新一代人工智能产业能做什么
- 虚拟机无法启动提示give root password for maintenance的多种解决方法