BZOJ3444 最后的晚餐【细节题+组合数学】*
BZOJ3444 最后的晚餐
Description
【问题背景】
高三的学长们就要离开学校,各奔东西了。某班n人在举行最后的离别晚餐时,饭店老板觉得十分纠结。因为有m名学生偷偷找他,要求和自己暗恋的同学坐在一起。
【问题描述】
饭店给这些同学提供了一个很长的桌子,除了两头的同学,每一个同学都与两个同学相邻(即坐成一排)。给出所有信息,满足所有人的要求,求安排的方案总数(这个数字可能很大,请输出方案总数取余989381的值,也可能为0)。
Input
输入有m+1行,第一行有两个用空格隔开的正整数n、m,如题所示。接下来的m行,每一行有两个用空格隔开的正整数,第i行为Ai和Bi,表示Ai的暗恋对象为Bi,保证Ai互不相等。
Output
输出只有一行,这一行只有一个数字,如题所示。
Sample Input
4 2
1 2
4 3
Sample Output
8
【数据范围】
100%的数据,0<n≤500000,1≤Ai,Bi≤n,0≤m≤n,保证没有人自恋。
这题首先是我们把关系看成无相边
这就来了一个问题,我们需要把重边去掉,可以用map搞一下
然后就是如果一个点的度数大于二不合法
其次是有大小大于2的环不合法
剩下的方案数就是2大于等于2的联通块数量∗(总联通块数量)!2^{大于等于2的联通块数量}*(总联通块数量)!2大于等于2的联通块数量∗(总联通块数量)!
#include<bits/stdc++.h>
using namespace std;
#define N 500010
#define Mod 989381
#define fu(a,b,c) for(int a=b;a<=c;++a)
struct Edge{int v,nxt;}E[N<<];
int head[N],tot=;
int n,m,d[N],bel[N],siz[N],mark[N];
map<int,bool> g[N];
void add(int u,int v){E[++tot]=(Edge){v,head[u]};head[u]=tot;}
void dfs(int u,int fa,int belong){
bel[u]=belong;
siz[belong]++;
for(int i=head[u];i;i=E[i].nxt){
int v=E[i].v;
if(v==fa)continue;
if(bel[v])mark[belong]=;
else dfs(v,u,belong);
}
}
int main(){
scanf("%d%d",&n,&m);
fu(i,,m){
int u,v;scanf("%d%d",&u,&v);
if(u>v)swap(u,v);
if(g[u][v])continue;
g[u][v]=;
add(u,v);
add(v,u);
d[u]++;d[v]++;
}
fu(i,,n)if(d[i]>){printf("");return ;}
int cnt=;
fu(i,,n)if(!bel[i])dfs(i,,++cnt);
int ans=;
fu(i,,cnt){
if(mark[i]&&siz[i]>){printf("");return ;}
ans=1ll*ans*i%Mod;
if(siz[i]>)ans=*ans%Mod;
}
printf("%d",ans);
return ;
}
BZOJ3444 最后的晚餐【细节题+组合数学】*的更多相关文章
- Codeforces Round #392 (Div. 2)-758D. Ability To Convert(贪心,细节题)
D. Ability To Convert time limit per test 1 second Cmemory limit per test 256 megabytes input standa ...
- 【线段树 细节题】bzoj1067: [SCOI2007]降雨量
主要还是细节分析:线段树作为工具 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小 ...
- bzoj3444: 最后的晚餐(并查集+组合数学)
3444: 最后的晚餐 题目:传送门 题解: 考虑有解的情况: 直接上并查集,同一个联通块里的人一定要坐在一起的.不难发现其实对于每个联通块最多就只有两种排列方式,那就直接把大于等于两个人的联通块先去 ...
- BZOJ3444: 最后的晚餐
Description [问题背景] 高三的学长们就要离开学校,各奔东西了.某班n人在举行最后的离别晚餐时,饭店老板觉得十分纠结.因为有m名学生偷偷找他,要求和自己暗恋的同学坐在一起. [问题描述] ...
- zoj 3745 Salary Increasing(坑爹的细节题!)
题目 注意题目中的,引用绝望的乐园中的进一步解释如下: 这是一道浙大月赛的题,一如既往的坑爹,好好一道水题,被搞成一道坑题!!! //注意:r(i) < l(i+1) !细节啊细节! #incl ...
- 【交互 细节题 思维题】cf1064E. Dwarves, Hats and Extrasensory Abilities
第一次做交互真有趣……:挺好的细节思维题 This is an interactive problem. In good old times dwarves tried to develop extr ...
- bzoj1067——SCOI2007降雨量(线段树,细节题)
题目描述 我们常常会说这样的话:"X年是自Y年以来降雨量最多的".它的含义是X年的降雨量不超过Y年,且对于任意\(Y<Z<X\),Z年的降雨量严格小于X年.例如2002 ...
- Codeforces 571E - Geometric Progressions(数论+阿巴细节题)
Codeforces 题目传送门 & 洛谷题目传送门 u1s1 感觉此题思维难度不太大,不过大概是细节多得到了精神污染的地步所以才放到 D1E 的罢((( 首先我们对所有 \(a_i,b_i\ ...
- Han Move(细节题)
Problem 1609 - Han Move Time Limit: 1000MS Memory Limit: 65536KB Total Submit: 620 Accepted: 1 ...
随机推荐
- ubuntu如何U盘启 动制作
先到出 U盘的位置, 方法有很多,terminal 用root权限,采用fdisk -f 命令 unmount /dev/sdb -I //U盘拨出 sdb为U盘挂载的位置 mkfs.fat /dev ...
- Memcached gets 命令
Memcached gets 命令获取带有 CAS 令牌存 的 value(数据值) ,如果 key 不存在,则返回空. 语法: gets 命令的基本语法格式如下: gets key 多个 key 使 ...
- openstack dpdk
# ovs-vsctl showeef7cd95-0677-486c-b119-5d6ac8531c56 Manager "ptcp:6640:127.0.0.1" is_conn ...
- 解决VS2015中出现类似于error C4996: 'scanf': This function or variable may be unsafe的安全检查错误
用习惯了VS老版本的人当刚使用VS2013的时候可能总遇到类似于这样的错误: error C4996: 'scanf': This function or variable may be unsafe ...
- yii2的定时任务
php yii minsheng-cancel-account/cancel-applied-account
- java开发中beancopy比较
在java应用开发过程中不可避免的会使用到对象copy属性赋值. 1.常用的beancopy工具 组织(包) 工具类 基本原理 其他 apache PropertyUtils java反射 B ...
- Isolation Forest原理总结
Isolation Forest(以下简称iForest)算法是由南京大学的周志华和澳大利亚莫纳什大学的Fei Tony Liu, Kai Ming Ting等人共同提出,用于挖掘异常数据[Isola ...
- 【hive】where使用注意的问题
不能再where后边使用别名,group by后边也一样不能使用别名 select id,col1 - col2 from table1 where (col1 - col2) > 1000; ...
- Algorithm2: 重复查过半数的元素
数组中,有一个元素的值在数组中重复的个数是超过一半,获得元素超过一半的元素值 int MoreThanHalfNumber(int * arr, int n){ in ...
- hdu 5826 physics (物理数学,积分)
physics Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Sub ...