【CF MEMSQL 3.0 E. Desk Disorder】
time limit per test 2 seconds
memory limit per test 256 megabytes
input standard input
output standard output
A new set of desks just arrived, and it's about time! Things were getting quite cramped in the office. You've been put in charge of creating a new seating chart for the engineers. The desks are numbered, and you sent out a survey to the engineering team asking each engineer the number of the desk they currently sit at, and the number of the desk they would like to sit at (which may be the same as their current desk). Each engineer must either remain where they sit, or move to the desired seat they indicated in the survey. No two engineers currently sit at the same desk, nor may any two engineers sit at the same desk in the new seating arrangement.
How many seating arrangements can you create that meet the specified requirements? The answer may be very large, so compute it modulo 1000000007 = 109 + 7.
Input
Input will begin with a line containing N (1 ≤ N ≤ 100000), the number of engineers.
N lines follow, each containing exactly two integers. The i-th line contains the number of the current desk of the i-th engineer and the number of the desk the i-th engineer wants to move to. Desks are numbered from 1 to 2·N. It is guaranteed that no two engineers sit at the same desk.
Output
Print the number of possible assignments, modulo 1000000007 = 109 + 7.
Examples
input
4
1 5
5 2
3 7
7 3
output
6
input
5
1 10
2 10
3 10
4 10
5 5
output
5
Note
These are the possible assignments for the first example:
- 1 5 3 7
 - 1 2 3 7
 - 5 2 3 7
 - 1 5 7 3
 - 1 2 7 3
 - 5 2 7 3
 
【翻译】有2*n个座位,输入每一个人的原位和理想位置,现在需要为每一个人分配一个独一无二的位置使得每个人坐在理想位置或者原位置上。输出方案数(%1000000007)。
题解:
     ①使用建图分来讨论来转化问题。
②使用有向边从原位指向理想位置:
           仅有如下三种情况:
             (1)一个自环或者一堆链状结构最终止于一个自环
(2)一根或者一堆链状结构最终止于一个不与其他点和自身成环的点
(3)形成环(非自环)
那么对于(1),ans*=1(只用一种),对于(2)ans*=节点数(任意一个点可以移动一次),
对于(3)ans*=2(仅有两种情况——都在原位或者都在理想位置)
#include<stdio.h>
#define M 1000000007
#define go(i,a,b) for(int i=a;i<=b;i++)
const int N=200004;
long long ans=1;int n,fa[N],Type[N],siz[N],u,v,U,V;
int find(int x){return fa[x]=x==fa[x]?x:find(fa[x]);}
int main()
{
scanf("%d",&n);n<<=1;
go(i,1,n)fa[i]=i,siz[i]=1;
go(i,1,n/2)
{
scanf("%d%d",&u,&v);
U=find(u),V=find(v);
if(u==v){Type[U]=1;continue;}
if(U==V){Type[U]=2;continue;}
Type[U]|=Type[V];siz[fa[V]=U]+=siz[V];
}
go(i,1,n)if(i==find(i))ans=ans*(Type[i]?Type[i]:siz[i])%M;
printf("%d\n",(ans%M+M)%M);return 0;
}//Paul_Guderian
【CF MEMSQL 3.0 E. Desk Disorder】的更多相关文章
- 【CF MEMSQL 3.0 A. Declined Finalists】
		
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
 - 【CF MEMSQL 3.0 C. Pie Rules】
		
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
 - 【CF MEMSQL 3.0  D. Third Month Insanity】
		
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
 - 【CF MEMSQL 3.0 B. Lazy Security Guard】
		
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
 - 【CF edu 27 G. Shortest Path Problem?】
		
time limit per test 3 seconds memory limit per test 512 megabytes input standard input output standa ...
 - 【CF Round 439 E. The Untended Antiquity】
		
time limit per test 2 seconds memory limit per test 512 megabytes input standard input output standa ...
 - 【CF Round 439 C. The Intriguing Obsession】
		
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
 - 【CF Round 439 B. The Eternal Immortality】
		
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
 - 【Magicodes.IE 2.0.0-beta1版本发布】已支持数据表格、列筛选器和Sheet拆分
		
为了更好的完善Magicodes.IE,春节期间我们会进行一次大的重构.由于精力有限,急缺文档和翻译(将文档翻译为英文文档)支持,诚邀各位加入.同时在功能方便也做了相关规划,有兴趣的朋友可以参与提交P ...
 
随机推荐
- php-7.2.3源代码和php-5.6.26源代码摘录,对比 “汇编php文件”和“执行opcode代码”
			
php-7.2.3 在“汇编php文件”和“执行opcode代码”上做了大量改变php-5.6.26 没见到支持抽象语法树的相关代码,php-7.2.3 见到支持抽象语法树的相关代码php-5.6.2 ...
 - Hadoop(5)-HDFS概述
			
HDFS产生背景 HDFS优缺点 HDFS组成架构 HDFS文件块大小
 - Leecode刷题之旅-C语言/python-20.有效的括号
			
/* * @lc app=leetcode.cn id=20 lang=c * * [20] 有效的括号 * * https://leetcode-cn.com/problems/valid-pare ...
 - vs13发布web程序 iis上
			
一.配置iis 1,找到控制面板--程序--启用或关闭Windows功能 2,从列表中选择Internet Infomation Services,并且把相应的功能条目勾选上,如果不清楚,可以全部选中 ...
 - echarts的pie图中,各区块颜色的调整
			
今天在学习使用echarts生成各种图表. 然后在使用pie图时出现我无论怎么更改代码中的颜色,pie图中各块的颜色都十分相近,几乎没法区别块与块之间的区别,如下图: 在下图中,除了其中一块的是红色的 ...
 - 58HouseSearch项目迁移到asp.net core
			
前言 58HouseSearch这个项目原本是基于ASP.NET MVC 4写的,开发环境是Windows+VS2015,发布平台是linux+mono+jexus,这样看来整个项目基本已经满足跨平台 ...
 - malloc分配失败的两个现象
			
在实际代码中,malloc的反复分配释放,可能会导致某一次malloc分配失败,虽然上一次调用malloc分配成功(然后释放),下一次在相同地方调用malloc分配可能会失败,疑问在于,既然上一次分配 ...
 - CentOS修改网卡名称
			
转 一.问题说明 测试环境中出现的小问题,因为虚拟机之间经常复制来复制去,导致网卡配置这块的不一致现象. 配置文件的信息: [root@ora10g network-scripts]# catifcf ...
 - jmeter之Synchronizing Timer的理解
			
该功能类似loadrunner的集合点,一般按照jmeter的树形结构,放在需要设置集合点的请求之前,两个参数的意思,我们先看官网的解释: 大概意思就是: Number of Simulated Us ...
 - 正则表达式 Pattern和Matcher
			
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介: java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. ...