博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ3444: 最后的晚餐
阅读量:5066 次
发布时间:2019-06-12

本文共 1892 字,大约阅读时间需要 6 分钟。

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,保证没有人自恋。
 
把暗恋关系看作双向边,如果所有点度数都<=2,且没有环则有解。
否则不难发现每个连通分量是一条链,如果链上元素多于1则答案是2,否则答案是1。
每个连通分量肯定在一起,所以再将答案乘以连通分量个数的阶乘就行了。
#include
#include
#include
#include
#include
#include
#define rep(i,s,t) for(int i=s;i<=t;i++)#define dwn(i,s,t) for(int i=s;i>=t;i--)#define ren for(int i=first[x];i;i=next[i])using namespace std;const int BufferSize=1<<16;char buffer[BufferSize],*head,*tail;inline char Getchar() { if(head==tail) { int l=fread(buffer,1,BufferSize,stdin); tail=(head=buffer)+l; } return *head++;}inline int read() { int x=0,f=1;char c=Getchar(); for(;!isdigit(c);c=Getchar()) if(c=='-') f=-1; for(;isdigit(c);c=Getchar()) x=x*10+c-'0'; return x*f;}typedef long long ll;const int mod=989381;const int maxn=500010;int n,m,A[maxn],in[maxn],pa[maxn];int findset(int x) { return pa[x]==x?x:pa[x]=findset(pa[x]);}int main() { n=read();m=read(); rep(i,1,n) pa[i]=i; rep(i,1,m) { int u=read(),v=read(); if(A[v]==u) continue; if(findset(u)==findset(v)) {puts("0");return 0;} pa[findset(u)]=findset(v); in[v]++;in[u]++;A[u]=v; } int ok=1,blo=0; rep(i,1,n) { if(in[i]>2) ok=0; if(findset(i)==i) blo++; } if(!ok) puts("0"); else { ll ans=1,cnt=0; rep(i,1,blo) (ans*=i)%=mod; rep(i,1,n) if(!in[i]) cnt++; rep(i,1,blo-cnt) (ans*=2)%=mod; printf("%lld\n",ans); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/wzj-is-a-juruo/p/5210984.html

你可能感兴趣的文章
thinkphp5 csv格式导入导出(多数据处理)
查看>>
fur168.com 改成5917电影
查看>>
PHP上传RAR压缩包并解压目录
查看>>
Codeforces 719B Anatoly and Cockroaches
查看>>
jenkins常用插件汇总
查看>>
c# 泛型+反射
查看>>
第九章 前后查找
查看>>
Python学习资料
查看>>
多服务器操作利器 - Polysh
查看>>
[LeetCode] Candy
查看>>
Jmeter学习系列----3 配置元件之计数器
查看>>
jQuery 自定义函数
查看>>
jq 杂
查看>>
jquery datagrid 后台获取datatable处理成正确的json字符串
查看>>
作业一
查看>>
AJAX
查看>>
ActiveMQ与spring整合
查看>>
web服务器
查看>>
Git的使用--打tag
查看>>
F# 编程 借助 F# 构建 MVVM 应用程序
查看>>