1067. Sort with Swap(0,*) (25)
来源:互联网 发布:淘宝客链接批量转换 编辑:程序博客网 时间:2024/04/28 02:53
#include <iostream>#include <cstdio>using namespace std;#define N 100000inline int root(int n, int rid[]) {while(n != rid[n]) n = rid[n];return n;}inline void connect(int a, int b, int rid[], int count[]) {int ra = root(a, rid);int rb = root(b, rid);if(ra == a && !count[ra])count[ra] ++;if(rb == b && !count[rb])count[rb] ++;if(ra != rb) {int ca = count[ra];int cb = count[rb];if(ca > cb) {rid[rb] = ra;count[ra] += count[rb];}else {rid[ra] = rb;count[rb] += count[ra];}}}int main(int argc, char **argv) {int n;cin >> n;int rid[N] = {}, count[N] = {};for(int i = 0; i < n; i ++) {rid[i] = i;}int index;for(int i = 0; i < n; i ++) {int d;scanf("%d", &d);connect(d, i, rid, count);}int sn = 0;for(int i = 0; i < n; i ++) {if(i == rid[i] && count[i] > 1) {sn = sn + 1 + count[i];}}if(n > 1 && (rid[0] || count[0] > 1))sn -= 2;cout << sn << endl;return 0;}
0 0
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- pat 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- PAT 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 【PAT】1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 1067. Sort with Swap(0,*) (25)
- 简单学会FastJson解析
- 学习NodeJS的一点总结---Express
- 数据结构期末课程设计
- curator 锁之 Shared Reentrant Lock
- Hibernate
- 1067. Sort with Swap(0,*) (25)
- MFC新建文件夹、打开文件夹的实现方法
- Mybatis传多个参数(三种解决方案)
- C语言基础:C语言宏定义(3) - 条件编译
- 窝窝团在美提交IPO招股书 拟融资4000万美元
- 记录博客地址---临时记录
- 驾校随笔01
- Word Ladder
- 用批处理遍历打印文件夹以及删除空文件夹