BZOJ 1529 [POI 2005] 并查集 解题报告
2017-10-12 20:53
501 查看
1529: [POI2005]ska Piggy banks
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
【解题报告】
代码如下:
写完Tarjan发现才要爆
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
【解题报告】
代码如下:
写完Tarjan发现才要爆
/************************************************************** Problem: 1529 User: onepointo Language: C++ Result: Accepted Time:1620 ms Memory:29652 kb ****************************************************************/ #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define N 1000010 int n,ans; namespace Union_Find_Set { int fa ; int Find(int x) { if(!fa[x]||fa[x]==x) return fa[x]=x; return fa[x]=Find(fa[x]); } void Union(int x,int y) { x=Find(x);y=Find(y); if(x==y) return ; fa[x]=y; ans--; } } using namespace Union_Find_Set; int main() { scanf("%d",&n);ans=n; for(int i=1;i<=n;++i) { int x;scanf("%d",&x); Union(x,i); } printf("%d\n",ans); return 0; }
相关文章推荐
- BZOJ 1116 [POI 2008] 并查集 解题报告
- BZOJ1086 [SCOI2005]王室联邦 解题报告【数据结构(?)】【树分块】【DFS】
- BZOJ 2212 [Poi 2011] 线段树合并 解题报告
- bzoj 1854 游戏 并查集+贪心 解题报告
- BZOJ 1103 [POI 2007] dfs序+树状数组 解题报告
- [BZOJ1115][POI2009]石子游戏Kam解题报告|阶梯博弈
- BZOJ 3319 并查集 解题报告
- bzoj1500 [NOI2005]维修数列解题报告
- BZOJ 1084 [SCOI 2005] DP 解题报告
- BZOJ 1694 & 1742 [Usaco 2005 nov] 区间DP 解题报告
- BZOJ 3211&3038 并查集+树状数组 解题报告
- BZOJ 3833 [POI 2014] Solar Lamps 解题报告
- BZOJ 1097 [POI 2007] SPFA+状压DP 解题报告
- BZOJ 4726 [POI 2017] 树DP 解题报告
- [BZOJ2946] [Poi2000]公共串解题报告|后缀数组
- BZOJ 2079 [Poi 2010] 图论 解题报告
- [BZOJ1087][SCOI2005]互不侵犯King解题报告|状压DP
- BZOJ 2005 [Noi 2010] 数论 解题报告
- BZOJ 2792 [POI 2012] 二分答案 解题报告
- BZOJ 1682 [Usaco2005 Mar] 最小生成树 解题报告