题意简述

翻译很清楚了

题目解法

如果一个人想去的位置上原来坐着人,那么他要坐到这个位置上,就要把原来的人赶走。

原来的人被赶走了,就只能去想去的位置。如果那个位置上有人,又要把那个人赶走。

我们发现,如果将每个人原来的位置连一条单向边到想要的位置上,那么这种关系似乎是一棵树。每一个人能换,当且仅当他的父亲能换

这种关系会在什么时候结束呢?第一种情况,到了一个没人坐的节点。这种情况当然皆大欢喜,树上任何一个人,只要他想换,都能换成功(但最多只能成功一个人,因为另一个人如果也想换,就必定会有一个位置上挤着两个想要换的人)。

第二种情况,到了树上一个节点。那么这时就不是树了,这是一棵基环树。对于一棵基环树,我们只有全换和全不换两种情况。同时,树上不属于环的节点肯定都不能换。因为如果换了,那么环上节点必须要换,因为根节点换了。此时必定不会合法。

如果是自环呢?那么这个节点相当于不能换。不能换,也就不能被赶走。这棵树只有一种情况,就是都不换。

这个题就变成了简单的乘法原理。

注意,位置是人的两倍,输入的第一个数是人数

我们可以用并查集查找根节点。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod = 1e9 + 7;
const ll maxn = 2e5 + 5;
ll n;
ll fa[maxn], si[maxn], a[maxn];
bool ton[maxn];
ll find(ll u){ return (fa[u] == u) ? fa[u] : fa[u] = find(fa[u]); }
signed main(){
freopen("text.in", "r", stdin);
scanf("%lld", &n);
for(ll i = 1;i <= 2 * n;i ++) fa[i] = i, si[i] = 1;
ll u, v;
for(ll i = 1;i <= n;i ++)
{
scanf("%lld%lld", &u, &v);
a[u] = v;
if(u == v) continue;
ll U = find(u), V = find(v);
// cout << u << ' ' << v << ' ' << U << ' ' << V << endl;
if(U == V)
{
si[V] = -1;
}
else
{
fa[U] = V;
if(si[V] != -1) si[V] += si[U];//每一个人开始的位置是不同的,所以只有根节点可能形成环
}
}
ll ans = 1;
for(ll i = 1;i <= 2 * n;i ++)
{
ll zu = find(i);
if(ton[zu] == 1 || (a[zu] == zu) || si[zu] == -2) continue;
ton[zu] = 1;
if(si[zu] == -1) si[zu] = 2;
ans *= si[zu];
ans %= mod;
}
printf("%lld\n", ans);
return 0;
}

CF859E题解的更多相关文章

  1. CF859E 题解

    分析 我们不妨把这些座位看作是一张图中的节点,把每个人的诉求作为一条边(由[原座位]指向[想去的座位]) 比如,对于样例#1,我们就可以得到这样一张图: 显然,我们有可能会得到多个连通图(比如上面这张 ...

  2. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  3. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  4. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  5. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  6. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  7. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  8. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  9. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  10. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. SecPoint Port Scanner v4.0

    SecPoint Port Scanner v4.0 Usage: portscanner <IP> or <hostname> [options] 选项: -p <st ...

  2. 逆向学习物联网-网关ESP8266-04系统联合调试

    1.测试平台原理 2.搭建硬件测试平台 3.软件测试平台 1)串口终端 2)串口监视 3)OneNET后台服务 https://open.iot.10086.cn/passport/login/ 户名 ...

  3. RN 使用react-navigation写可以滚动的横向导航条

    在react-native中写横向导航条,首选肯定是react-navigation的createMaterialTopTabNavigator,附上官方文档链接.https://reactnavig ...

  4. CCF 202012-2 期末预测之最佳阈值

    #include <iostream> #include <bits/stdc++.h> #include <string> using namespace std ...

  5. Redis Stream实现全部节点机器推送消息

    背景 有时候,在微服务时代,我们需要对全部的机器节点进行通知.在常规情况下,一个请求经过负载均衡只有一个机器可以收到.那么,如何能让全部的机器都收到同样的请求呢?需要借助消息队列的监听机制,让每个节点 ...

  6. 样式优先级的规则:!important`>行内样式>嵌入样式>外链样式>id选择器>类选择器>标签选择器>复合选择器>通配符>继承样式

    CSS样式的优先级应该分成四大类 第一类`!important`,无论引入方式是什么,选择器是什么,它的优先级都是最高的. 第二类引入方式,行内样式的优先级要高于嵌入和外链,嵌入和外链如果使用的选择器 ...

  7. iOS包大小计算

    一.LinkMap文件分析 说明:LinkMap数据是根据文章<LinkMap文件分析>中方法实验实测数据. 如何获得LinkMap文件 1.在XCode中开启编译选项Write Link ...

  8. Software Engineering homework 3

    博客信息 沈阳航空航天大学计算机学院2020软件工程作业 作业要求 https://edu.cnblogs.com/campus/sau/Computer1701-1705/homework/1061 ...

  9. js 将多层json对象 转化为一层json

    const parse = data => { const uid = `uid_${Date.now()}`; const process = (input, prefix = '', jso ...

  10. Vue二级联动上传图片

    二级联动的后台和之前一样都需要一个字典字段查询来实现二级联动 但是由于VUE语法和AJAX的不同在前台绑定的时候也有所不同 2.1 首先下拉框的写法就有了本质的改变通过v-model="&q ...