题目链接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 ;
}

最新文章

  1. jQuery:年月日三级联动
  2. POJ1129Channel Allocation[迭代加深搜索 四色定理]
  3. Linux下修改进程名称
  4. NAT模式下用secureCRT连接虚拟机
  5. HDU 4059 容斥原理+快速幂+逆元
  6. css中各种居中的奇技淫巧总结
  7. java中的匿名内部类
  8. MHz 和 Mbps的区别
  9. [Web远程wsshd]CentOS6.4搭建配置wssh
  10. CentOS下安装两个或多个Tomcat7
  11. python 内存泄露的诊断 - 独立思考 - ITeye技术网站
  12. OPENWRT make menuconfig错误之一
  13. cocos2d CCLOG格式符号表
  14. Nginx的Rewrite规则与实例
  15. C#读写Shapefile
  16. MySQL的入门
  17. Struts 2 之资源国际化
  18. [Spark][Python]sortByKey 例子
  19. group by 错误
  20. 对于src路径问题,深层理解的实践。且对于输出流write()两个方法的源码阅读。

热门文章

  1. 07 (OC)* XIB原理和Xib、storyBoard、代码的优缺点
  2. 无法将类型为“System.Xml.XmlComment”的对象强制转换为类型“System.Xml.XmlElement”
  3. FPGA、GPU、CPU三者各自的优缺点是什么呢?
  4. MYSQL增删改查添加外键
  5. Ubuntu18.04 显卡驱动+Cuda安装踩坑记录 以及Ubuntu虚拟内存的添加
  6. 小红书第五章——引用类型之function类型
  7. 基于Spark的电影推荐系统(实战简介)
  8. Python实战练习_贪吃蛇 (pygame的初次使用)
  9. UML图标含义及记忆方法
  10. 移动端获取短信验证码java实现——阿里云短信服务