Codeforces--Books Exchange (hard version)
2024-08-27 23:58:01
题目链接http://codeforces.com/contest/1249/problem/B2 。并查集思想,将数分成多个集合,每个集合的大小就是一轮的所需天数。
Map[i]存储数据。
flag[i]来表示第i个数是否被访问过。
mm[i]记录第i个集合所对应的集合大小,索引i为第i个集合的根对应的值。
getParent方法利用递归的思想更新每个节点的上继,直接指向当前集合的根。
由于访问过的集合不再进行访问,因此,分析时间复杂度,准确是O(CN),C为一个常数。在这里需要注意的是,mm在每次使用后要清,不然会有问题。
#include<bits/stdc++.h> /*
* 并查集
*/ using namespace std; static const int MAX = ; int Map[MAX];
bool flag[MAX];
map<int, int> mm; int getParent(int x){
if(!flag[x]){
flag[x] = true;
Map[x] = getParent(Map[x]);
}
return Map[x];
} int main(){
int q;
scanf("%d", &q);
while(q--){
int n;
scanf("%d", &n);
for(int i=;i<=n;i++){
flag[i] = false;
} // construct set
int tmp;
for(int i=;i<=n;i++){
scanf("%d", &Map[i]);
} // solve
for(int i=;i<=n;i++){
int parent = getParent(i);
mm[parent]++;
} for(int i=;i<=n;i++){
if(i==){
printf("%d", mm[Map[i]]);
}
else{
printf(" %d", mm[Map[i]]);
}
}
printf("\n");
mm.clear();
}
return ;
}
最新文章
- jQuery:年月日三级联动
- POJ1129Channel Allocation[迭代加深搜索 四色定理]
- Linux下修改进程名称
- NAT模式下用secureCRT连接虚拟机
- HDU 4059 容斥原理+快速幂+逆元
- css中各种居中的奇技淫巧总结
- java中的匿名内部类
- MHz 和 Mbps的区别
- [Web远程wsshd]CentOS6.4搭建配置wssh
- CentOS下安装两个或多个Tomcat7
- python 内存泄露的诊断 - 独立思考 - ITeye技术网站
- OPENWRT make menuconfig错误之一
- cocos2d CCLOG格式符号表
- Nginx的Rewrite规则与实例
- C#读写Shapefile
- MySQL的入门
- Struts 2 之资源国际化
- [Spark][Python]sortByKey 例子
- group by 错误
- 对于src路径问题,深层理解的实践。且对于输出流write()两个方法的源码阅读。
热门文章
- 07 (OC)* XIB原理和Xib、storyBoard、代码的优缺点
- 无法将类型为“System.Xml.XmlComment”的对象强制转换为类型“System.Xml.XmlElement”
- FPGA、GPU、CPU三者各自的优缺点是什么呢?
- MYSQL增删改查添加外键
- Ubuntu18.04 显卡驱动+Cuda安装踩坑记录 以及Ubuntu虚拟内存的添加
- 小红书第五章——引用类型之function类型
- 基于Spark的电影推荐系统(实战简介)
- Python实战练习_贪吃蛇 (pygame的初次使用)
- UML图标含义及记忆方法
- 移动端获取短信验证码java实现——阿里云短信服务