【链接】h在这里写链接


【题意】


有N个人。
2N个座位。
现在告诉你这N个人它们现在的座位。以及它们想去的座位。
每个人可以去它们想去的座位或者就站在原地不动。
新的座位和旧的座位,都不允许一个座位被两个人占据的情况。
问你安排的方案数。

【题解】


这是一个n个节点,n条边的图。
构成的图有两种情况。
->各个连通块独立计算答案,然后乘起来。
如果n个点,n-1条边。
则是一棵树。
那么写个例子就会发现,答案就是节点的个数。

如果n个点,那条边

会出现一个环(且恰好只有一个环);

如果是一个自环。那么答案为1.

因为所有人都不能动。->动了的话,那个自环上的人是无法走的。

如果这个环的长度大于等于2.

则答案为2.

因为除了环上的人,其他人都不能动。

且环上的人要么全动,要么全不动。

两种情况。

可以用并查集来判断有没有出现环。

如果是自环的话,答案直接设置为1就好。

如果没有环。

则答案为并查集的大小(找f(i)==i的根节点);

如果有环

答案就为2.

(各个连通块答案累乘就好)



【错的次数】


2

【反思】


tarjan不知道哪里写错了>_<
下次一个环的这种题就别写tarjan了。
并查集找环很方便啊!

【代码】

#include <bits/stdc++.h>
using namespace std; const int N = 2e5;
const long long MOD = 1e9+7; int n,f[N+10],cycle[N+10],size[N+10]; int ff(int x){ if (f[x]==x) return x;else return f[x] = ff(f[x]);} int main(){
//freopen("F:\\rush.txt","r",stdin);
ios::sync_with_stdio(0),cin.tie(0);
cin >> n;
for (int i = 1;i <= 2*n;i++) f[i] = i,size[i]=1;
for (int i = 1,x,y;i <= n;i++){
cin >> x >> y;
if (x==y){
cycle[ff(x)]=2;
continue;
}
int r1 = ff(x),r2 = ff(y);
if (r1!=r2){
f[r2] = r1;
size[r1]+=size[r2];
cycle[r1]|=cycle[r2];
}else
cycle[r1] = 1;
}
long long ans = 1;
for (int i = 1;i <= 2*n;i++)
if (ff(i)==i){
if (cycle[i]==1)
ans = ans*2%MOD;
else
if (cycle[i]==0)
ans = ans*size[i]%MOD;
}
cout << ans << endl;
return 0;
}

【MemSQL Start[c]UP 3.0 - Round 1 E】Desk Disorder的更多相关文章

  1. 【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules

    [链接]h在这里写链接 [题意] 在这里写题意 [题解]     dp[i][0] 第i个位置,bob没有决策权     dp[i][1] 第i个位置,bob有决策权     dp[n][0] = 0 ...

  2. 【MemSQL Start[c]UP 3.0 - Round 1 B】 Lazy Security Guard

    [链接]h在这里写链接 [题意] 围成对应面积的方块最少需要多少条边. [题解] 有特定的公式的. 2*ceil(2*根号下(n)); -> 自己找下规律也很简单的. [错的次数] 0 [反思] ...

  3. 【MemSQL Start[c]UP 3.0 - Round 1 A】 Declined Finalists

    [链接]h在这里写链接 [题意] 在这里写题意 [题解] max(最大值-25,0) [错的次数] 0 [反思] 在这了写反思 [代码] #include <bits/stdc++.h> ...

  4. 【Xamarin挖墙脚系列:Xamarin4.0的重大变更】

    原文:[Xamarin挖墙脚系列:Xamarin4.0的重大变更] Windows下的变更不大,主要还是bug 的修复,性能的优化,API的扩展实现. 变化最大的是在Mac上的那个Xamarin.iO ...

  5. [No00006D]下载离线版的github for windows【以Github for Windows 3.0.110.为例】

    目录 先上地址后讲原理: 原理: 11个目录的文件怎么一口气下载呢? 最后,把下好的文件批量名,同时将GitHub.exe.manifest也放到软件根目录下(与GitHub.exe同级): 今后的猜 ...

  6. MemSQL Start[c]UP 2.0 - Round 1(无聊练手B题)

    http://codeforces.com/contest/452/problem/B   B. 4-point polyline time limit per test 2 seconds memo ...

  7. MemSQL Start[c]UP 2.0 - Round 2 - Online Round

    搞到凌晨4点一个没出,要gg了. A. Golden System http://codeforces.com/contest/458/problem/A #include<cstdio> ...

  8. MemSQL Start[c]UP 2.0 - Round 1

    A. Eevee http://codeforces.com/contest/452/problem/A 字符串水题 #include<cstdio> #include<cstrin ...

  9. MemSQL Start[c]UP 2.0 - Round 2

    反正晚上睡不着,熬到1点开始做比赛,6个题目只做了2个题目,而且手速还比较慢,待提升空间还很大呢. A题:给定两个0,1串(len<=100000), 但是不是普通的二进制串,而是q进制串,q ...

随机推荐

  1. 多线程模式之Master-Worker

    一. 介绍 需要使用Master-Worker的场景:主线程开了多个子进程(Worker进程)去执行任务时,主线程希望能收集到每个子进程的执行结果. 所以,Master-Worker模式基本上就是: ...

  2. 线段树 hdu3642 Get The Treasury

    不得不说,这是一题很经典的体积并.. 然而还是debug了2个多小时... 首先思路:按z的大小排序. 然后相当于扫描面一样,,从体积的最下方向上方扫描,遇到这个面 就将相应的两条线增加到set中,或 ...

  3. php数组合并有哪三种方法

    php数组合并有哪三种方法 一.总结 一句话总结:array_merge():array_merge_recursive():‘+'号 $a = array('color'=>'red',5,6 ...

  4. linux的vi或vim文件时,怎样消除刚才查找字符串的高亮?

    有时候,自己在通过/查找字符串时,会出现: 但是呢,当你保存,再次进入还是会出现这么花的高亮显示,很令人苦恼. 解决办法 随便,输入没有的字符串,即可解决. 如下 /sssssssssssssssss ...

  5. $.each(data, function (index, value) { })的用法;json和list<>的互相转换

    在json中常常碰到这样的代码: jquery $.each(data, function (index, value) {    }) 遍历处理data,可以是数组.DOM.json等,取决于直接给 ...

  6. ajax事件(五)

    建立和探索一个简单示例之后,现在可以深入了解XMLHttpRequest对象支持的功能,以及如何在你的请求中使用它们了.起点就是第二级规范里定义的那些额外事件.之前已经使用一个:readystatec ...

  7. python2 python3 m2crypto 安装(rsa 私钥文件加密)

    转自作者:大道至简_Andy 原文链接:https://www.jianshu.com/p/b308357ef649 第一种方式:使用apt-get(以Python2版本进行测试的) sudo apt ...

  8. 史上最简单,js并获取手机型号

    原先获取不了苹果系列的型号,但转换思路,先推断是否是苹果,再用分辨率获取型号 //获取手机型号函数begin function getPhoneType(){  //正则,忽略大写和小写 var pa ...

  9. metadata 和 routing

    虽然在刚开始源码概述时把代码分为分布式和数据两部分,但是它们的界限并不明显.之前这几篇可以说是这两部分的衔接.我们在快速接近数据(index)部分.本篇分析一下之前分析cluster遗留下的问题:Me ...

  10. 快速排序的期望复杂度O(nlogn)证明。

    快速排序的最优时间复杂度是 \(O(nlogn)\),最差时间复杂度是 \(O(n^2)\),期望时间复杂度是 \(O(nlogn)\). 这里我们证明一下快排的期望时间复杂度. 设 \(T(n)\) ...