题目描述:

你有一个1到N的排列P1,P2,P3...PN,还有M对数(x1,y1),(x2,y2),....,(xM,yM),现在你可以选取任意对数,每对数可以选取任意次,然后对选择的某对数(xi,yi)进行操作,操作方式为交换xi,yi两个位置的数。最终你想要Pi=i的位置尽可能多。输出最多可以有多少个这样的位置

输入格式:

第一行输入一个整数N,第二行输入一个整数M

接下来M行每行输入一对数xi,yi

输出格式:

输出一个整数

样例输入1:

5 2
5 3 1 4 2
1 3
5 4

样例输出1:

2

 

样例输入2:

10 8
5 3 6 8 7 10 9 1 2 4
3 1
4 1
5 9
2 5
6 5
3 5
8 9
7 9

样例输出2:

8

约定:

2<=N<=105,1<=M<=105,xi!=yi

牢骚:emmm,在看到这题的第一秒我整个人就感觉不好了

记得那是我的第一场abc,报完名用fuko大佬的电脑看了开始时间,嗯,九点

后来才知道fuko大佬的电脑是东京时间QAQ

虽然三十分钟AK了,但是因为晚开了一个小时,只有四十多名orz

所以这道D题真的是影响深刻,fuko大佬大概开题后3s就口胡完了标算

是非常中(jian)规(jian)中(dan)矩(dan)的D题

下面进入题解:

考虑如果a-b能互换,b-c能互换,那么a-c也一定能互换,这其实可以扔到并查集里,到时候查询a[i]的位置与i是不是祖先相同就可以了(没错就是这么短)

代码如下:

#include<set>
#include<cmath>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int n,m,a[],ans; struct dsu
{
int fa[],rank[]; void init(int n)
{
for(int i=;i<=n;i++)
{
fa[i]=i;
}
} int find(int x)
{
if(fa[x]==x)
{
return x;
}
return fa[x]=find(fa[x]);
} void union_(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx==fy)
{
return ;
}
if(rank[fx]<rank[fy])
{
fa[fx]=fy;
}
else
{
fa[fy]=fx;
if(rank[fx]==rank[fy])
{
rank[x]++;
}
}
} int same(int x,int y)
{
return find(x)==find(y);
}
}b; int main()
{
cin>>n>>m;
b.init(n);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=;i<=m;i++)
{
int from,to;
scanf("%d%d",&from,&to);
b.union_(from,to);
}
for(int i=;i<=n;i++)
{
if(b.same(a[i],i))
{
ans++;
}
}
printf("%d\n",ans);
}

啊,为什么3-1这么水……

XJOI 3578 排列交换/AtCoder beginner contest 097D equal (并查集)的更多相关文章

  1. AtCoder Beginner Contest 161

    比赛链接:https://atcoder.jp/contests/abc161/tasks AtCoder Beginner Contest 161 第一次打AtCoder的比赛,因为是日本的网站终于 ...

  2. AtCoder Beginner Contest 173 题解

    AtCoder Beginner Contest 173 题解 目录 AtCoder Beginner Contest 173 题解 A - Payment B - Judge Status Summ ...

  3. AtCoder Beginner Contest 148 题解

    目录 AtCoder Beginner Contest 148 题解 前言 A - Round One 题意 做法 程序 B - Strings with the Same Length 题意 做法 ...

  4. AtCoder Beginner Contest 238 A - F 题解

    AtCoder Beginner Contest 238 \(A - F\) 题解 A - Exponential or Quadratic 题意 判断 \(2^n > n^2\)是否成立? S ...

  5. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  6. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  7. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  8. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  9. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

随机推荐

  1. VC6.0打开文件是卡死的解决办法

    删除工程目录下的 .ncb .opt 文件,然后就OK了!

  2. Warning: require(): open_basedir restriction in effect. File(/www/wwwroot/../thinkphp/start.php) is not within the allowed path(s):

    Warning: require(): open_basedir restriction in effect. File(/www/wwwroot//../thinkphp/start.php) is ...

  3. 异步编程之co——源码分析

    异步编程系列教程: (翻译)异步编程之Promise(1)--初见魅力 异步编程之Promise(2):探究原理 异步编程之Promise(3):拓展进阶 异步编程之Generator(1)--领略魅 ...

  4. 「小程序JAVA实战」小程序开发注册用户的接口(33)

    转自:https://idig8.com/2018/08/30/xiaochengxujavashizhanxiaochengxukaifazhuceyonghudejiekou33/ 从用户注册接口 ...

  5. Mysql在spring中jdbc.properties连接配置

    ############################## mysql的数据源 ############################## jdbc.driver=com.mysql.jdbc.D ...

  6. sudo:must be setuid root 解决方法 <转>

    http://walkerqt.blog.51cto.com/1310630/1354103

  7. iss 默认上传大小为30 M

    在 Windows7(iis7.5).Win2008(iis 7.0)和Win2003(iis 6.0) 中,默认设置是特别严格和安全的,这样可以最大限度地减少因以前太宽松的超时和限制而造成的攻击.指 ...

  8. 201671010140. 2016-2017-2 《Java程序设计》java学习第十二周

    java学习第十章:图形程序设计       本章,介绍的是如何编写使用图形用户界面GUI的java程序.主要讲的是如何编写定义屏幕上的窗口大小和位置的程序,如何在窗口中采用多种字体显示文本,如何显示 ...

  9. JNDI数据源

    孤傲苍狼 只为成功找方法,不为失败找借口! JNDI学习总结(一)——JNDI数据源的配置 一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Cla ...

  10. 76-Relatives-欧拉函数

    http://poj.org/problem?id=2407 Relatives Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...