每一连通块砸开一个就可以拿到所有的钱, 所以用并查集求连通块数

-------------------------------------------------------------------

#include<bits/stdc++.h>
#define rep(i, n) for(int i = 0; i < n; i++)
#define clr(x, c) memset(x, c, sizeof(x))
using namespace std;
const int maxn = 1000009;
int fa[maxn], n, ans;
int find(int x) {
return x == fa[x] ? x : fa[x] = find(fa[x]);
}
void unite(int x, int y) {
int a = find(x), b = find(y);
fa[a] = b;
ans -= a != b;
}
int main() {
freopen("test.in", "r", stdin);
cin >> n;
ans = n;
rep(i, n) fa[i] = i;
rep(i, n) {
int v;
scanf("%d", &v);
unite(--v, i);
}
cout << ans << "\n";
return 0;
}

-------------------------------------------------------------------

1529: [POI2005]ska Piggy banks

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 959  Solved: 437
[Submit][Status][Discuss]

Description

Byteazar 有 N 个小猪存钱罐. 每个存钱罐只能用钥匙打开或者砸开. Byteazar 已经把每个存钱罐的钥匙放到了某些存钱罐里. Byteazar 现在想买一台汽车于是要把所有的钱都取出来. 他想尽量少的打破存钱罐取出所有的钱,问最少要打破多少个存钱罐.

Input

第一行一个整数 N (1 <= N <= 1.000.000) – 表示存钱罐的总数. 接下来每行一个整数,第 i+1行的整数代表第i个存钱罐的钥匙放置的存钱罐编号.

Output

一个整数表示最少打破多少个存钱罐.

Sample Input

4
2
1
2
4

Sample Output


2
In the foregoing example piggy banks 1 and 4 have to be smashed.

HINT

Source

转载于:https://www.cnblogs.com/JSZX11556/p/4670197.html

BZOJ 1529: [POI2005]ska Piggy banks( 并查集 )相关推荐

  1. BZOJ_P1529 [POI2005]ska Piggy banks(并查集)

    BZOJ传送门 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1062 Solved: 494 [Submit][Status][Discuss] Des ...

  2. [bzoj1529][POI2005]ska Piggy banks 大水题

    1529: [POI2005]ska Piggy banks Time Limit: 5 Sec  Memory Limit: 64 MB [Submit][Status][Discuss] Desc ...

  3. Taran 缩点【bzoj1529】[POI2005]ska Piggy banks

    [bzoj1529][POI2005]ska Piggy banks Description Byteazar 有 N 个小猪存钱罐. 每个存钱罐只能用钥匙打开或者砸开. Byteazar 已经把每个 ...

  4. bzoj1529: [POI2005]ska Piggy banks

    Description Byteazar 有 N 个小猪存钱罐. 每个存钱罐只能用钥匙打开或者砸开. Byteazar 已经把每个存钱罐的钥匙放到了某些存钱罐里. Byteazar 现在想买一台汽车于 ...

  5. #110-【我也不知道这是什么鬼算法】Ska Piggy Banks

    Description Byteazar 有 N 个小猪存钱罐. 每个存钱罐只能用钥匙打开或者砸开. Byteazar 已经把每个存钱罐的钥匙放到了某些存钱罐里. Byteazar 现在想买一台汽车于 ...

  6. P3420 [POI2005]SKA-Piggy Banks 并查集

    Byteazar the Dragon拥有N个小猪存钱罐.每一个存钱罐能够用相应的钥匙打开或者被砸开.Byteazar已经将钥匙放入到一些存钱罐中.现在已知每个钥匙所在的存钱罐,Byteazar想要买 ...

  7. [BZOJ 3211]花神游历各国(并查集+树状数组)

    Description Solution 树状数组单点修改区间查询 我们知道一个数n最多修改loglogn次就会变为1 并查集维护每个数右边第一个不为1的位置 #include<cstdio&g ...

  8. BZOJ 2303 方格染色(带权并查集)

    要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j ...

  9. BZOJ 2959: 长跑 [lct 双连通分量 并查集]

    2959: 长跑 题意:字词加入边,修改点权,询问两点间走一条路径的最大点权和.不一定是树 不是树? 把边双连通分量缩为一点! 怎么缩? 用一个并查集维护连通性,另一个并查集维护每个点所在边双的编号, ...

最新文章

  1. python3 str bytes bytearray 互相转换
  2. ES6 中 Promise 详解
  3. 【JUC并发编程04】线程间定制化通信(单标志法存在的问题)
  4. RGB565与RGB555位图文件格式的标志识别
  5. C语言DFS算法的实现(附完整源码)
  6. 《PC World》:Linux在桌面市场毫无长进 已经死亡
  7. html %3c 不给转义,八个无法利用XSS漏洞的场景
  8. AVL树的单双旋转解析
  9. [2020-AAAI] Revisiting Image Aesthetic Assessment via Self-Supervised Feature Learning 论文简析
  10. mongodb备份每一天的数据
  11. 自建git服务器 ssh,搭建基于SSH的Git服务器
  12. visual studio emmet使用
  13. Java基本数据类型字节长度
  14. 【jvm】《尚硅谷宋红康JVM全套教程(详解java虚拟机)》上篇 笔记
  15. 监控视频平台LiveNVR如何给摄像头视频添加文字水印和图片水印
  16. 今日芯声 | 印度 “真香”?苹果三家制造商及三星申请印度智能手机生产计划...
  17. 设置wsl2桥接模式和设置ip
  18. 使用get-pip.py 安装python2 的pip
  19. html中路径:点杠,点点杠的区别
  20. python飞机游戏视频教程_10分钟教你用Python做个打飞机小游戏超详细教程

热门文章

  1. ASP.NET MVC3源码下载
  2. 高效的序列化/反序列化数据方式 Protobuf
  3. 【Android】关于参数的传递问题
  4. 关于移动端 1px 像素问题
  5. android DatePicker
  6. WinDBG 技巧:如何生成Dump 文件(.dump 命令)
  7. python多级索引修改
  8. Python面试题总结(6)--数据类型(综合)
  9. Python 第三方库之 docxtpl (处理word文档)
  10. MySQL 之 存储过程