3444: 最后的晚餐

Time Limit: 5 Sec  Memory Limit: 128 MB
Submit: 811  Solved: 282
[Submit][Status][Discuss]

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

喜欢的人之间连条双向边,最后会得到x个连通图和y个独立的点

最后答案就是2^x*(x+y)!

但这题坑特别多!

只要有环就无解,只要一个点的度数>2就无解(喜欢他的人和他喜欢的人加在一起超过两个)

除此之外,两个人可以互相喜欢,这个时候会有重边,要去掉!

#include<stdio.h>
#include<vector>
#include<string.h>
using namespace std;
#define LL long long
#define mod 989381
vector<LL> G[500005];
LL ok, love[500005], in[500005];
void Sech(LL x, LL p)
{LL v, i;love[x] = 1;for(i=0;i<G[x].size();i++){v = G[x][i];if(love[v]){if(v!=p)ok = 0;continue;}Sech(v, x);}
}int main(void)
{LL n, m, i, x, y, ans, sum;while(scanf("%lld%lld", &n, &m)!=EOF){memset(in, 0, sizeof(in));memset(love, 0, sizeof(love));for(i=1;i<=n;i++)G[i].clear();for(i=1;i<=m;i++){scanf("%lld%lld", &x, &y);if(love[x]==y)continue;love[y] = x;G[x].push_back(y);G[y].push_back(x);in[x]++, in[y]++;}ok = ans = 1;for(i=1;i<=n;i++){if(in[i]>=3)ok = 0;}sum = 0;memset(love, 0, sizeof(love));for(i=1;i<=n;i++){if(love[i]==0){if(in[i]!=0){ans = ans*2%mod;Sech(i, 0);}love[i] = 1;sum++;}}if(ok==0)printf("0\n");else{while(sum--)ans = ans*(sum+1)%mod;printf("%lld\n", ans);}}return 0;
}

bzoj 3444: 最后的晚餐相关推荐

  1. BZOJ刷题记录---提高组难度

    BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...

  2. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  3. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

  4. BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)

    题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...

  5. BZOJ 2957楼房重建

    传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...

  6. wpf+xml实现的一个随机生成早晚餐的小demo

    话说每到吃完的时间就发愁,真的不知道该吃什么,然后就想到做一个生成吃什么的小软件,既然这个软件如此的简单,就打算用wpf开发吧,也不用数据库了,直接保存在xml中就可以了 程序整体结构如下图 首先我写 ...

  7. BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)

    BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...

  8. bzoj 4871: [Shoi2017]摧毁“树状图”

    4871: [Shoi2017]摧毁"树状图" Time Limit: 25 Sec  Memory Limit: 512 MB Submit: 53  Solved: 9 [Su ...

  9. BZOJ 1592. Making the Grade(思维,数据结构优化DP,以及三个拓展问题)[Usaco2008 Feb]【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ简单题合集x 目录 BZOJ 1592. Making the Grade 拓展问题一 拓展问 ...

最新文章

  1. php cms帮助文档,phpcms手册
  2. java 10新_【Java基础】Java10 新特性
  3. ORA-01555 snapshot too old
  4. React Bind Handle的思考
  5. 面试之 listview优化
  6. DXperience 8.2.4 简繁体汉化,本地化,Skins包含webform,winform
  7. HelloWorld.java –打印Hello World的Java程序
  8. leetcode1721. 交换链表中的节点
  9. LeetCode 1056. 易混淆数(哈希)
  10. C++求复数的角度_【研读.教材分析】“勾股定理”教学——基于单元整体的角度再思考...
  11. C++_-数据类型-字符型_转义字符_字符串类型--C++语言工作笔记012
  12. VC++6.0与VS2010的区别
  13. cranly:你的R包管理工具
  14. fdisk 分区/格式化/挂载
  15. 神州行省内流量套餐6元500M申请,发送BLSN6到10086即可
  16. 好用的浏览器,与Google Chrome同内核
  17. 增加对IE11的兼容
  18. 照片背景底色更换工具二(python+flask网页版源码及打包)
  19. 怎么把四个图片合成一个图片?
  20. 企业中台最佳实践--组织架构调整(五)

热门文章

  1. 学python语言有前途吗-学习python的前景怎么样?
  2. python入门先学什么-C和Python我该先学什么?
  3. 《正版 图解语音识别 语音识别入门实践教程 语音识别技术书 人工智能机器学习深度学习计算机网络编程书籍R3Z978》[日]荒木雅弘著【摘要 书评 在线阅读】-苏宁易购图书...
  4. 语音识别模块 LD3320
  5. win8.1计算机开启远程桌面连接不上,Win8.1电脑远程桌面无法连接提示“你的凭据不工作”怎么办...
  6. java简单增删改查_JAVA JDBC 简单的增删改查
  7. jpa内网mysql_mysql+jpa简单实现步骤
  8. linux tomcat 配置数据库,tomcat把项目放在root下root.xml配置数据库
  9. ES 处理日志字段超出 1000 引发的报错
  10. linux下redis开机自启动