3659: Which Dreamed It

Time Limit: 20 Sec  Memory Limit: 1024 MB
Submit: 280  Solved: 77
[Submit][Status][Discuss]

Description

有n个房间,每个房间有若干把钥匙能够打开特定房间的门。
你会做这么件事情:
最初你在房间1。
每当你到达一个房间,你可以选择该房间的一把钥匙,前往该钥匙对
应的房间,并将该钥匙丢到垃圾桶中。
你希望:最终回到房间1,且垃圾桶中有所有的钥匙。
求方案数。两组方案不同,当且仅当使用钥匙的顺序不同。注意,每
把钥匙都是不同的。

Input

有多组数据。
对于每组数据第一行输入一个数n,表示房间数。
接下来n行依次描述每个房间:
首先一个数s,表示这个房间的钥匙数目,接下来s个数,分别描述每把
钥匙能够打开的房间的门。
输入以n-0结尾。

Output

对于每组数据,输出方案数,为了方便你的输出,请将答案对1000003取模。

Sample Input

1
0
2
1 1
1 2
0

Sample Output

1
0

前置技能:有向图生成树个数

欧拉回路:存在一条路径经过所有的边刚好1次

有向图欧拉回路存在充要条件:①图连通;②对于所有点都满足出度=入度

BEST定理:

以x点为起点的欧拉回路个数sum = T[x]*∑(out[i]-1)!

其中T[x]表示以x为根的外向生成树个数,out[i]表示i点的出度,没有边的情况要特判

当然欧拉回路因为是回路所以存在循环同构,例如下图:

1->2;2->1;1->3;3->1

欧拉回路其实只有1种,但是如果算路径走法的话就会有2种

(1点可以先走2再走3,也可以先走3再走2),这个时候sum还要再乘上x点的出度,而这题就是这种情况

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define LL long long
#define mod 1000003
LL Jz[105][105], out[105], jc[200005] = {1};
int main(void)
{LL ans, A, B, P, temp;int n, i, j, k, m, x;for(i=1;i<=200000;i++)jc[i] = jc[i-1]*i%mod;while(scanf("%d", &n), n!=0){memset(Jz, 0, sizeof(Jz));for(i=1;i<=n;i++){scanf("%d", &m);out[i] = m;while(m--){scanf("%d", &x);Jz[i][x]--, Jz[x][x]++;}}if(n==1 && out[1]==0){printf("1\n");continue;}n -= 1;for(i=1;i<=n;i++){for(j=1;j<=n;j++)Jz[i][j] = (Jz[i+1][j+1]+mod)%mod;}ans = 1;for(i=1;i<=n;i++){for(j=i;j<=n;j++){if(Jz[j][i])break;}if(j!=i){ans = mod-ans;for(k=i;k<=n;k++)swap(Jz[i][k], Jz[j][k]);}for(j=i+1;j<=n;j++){A = Jz[i][i], B = Jz[j][i];while(B){P = A/B, temp = A, A = B, B = temp%B;ans = mod-ans;for(k=i;k<=n;k++){Jz[i][k] = (Jz[i][k]-P*Jz[j][k]%mod+mod)%mod;swap(Jz[i][k], Jz[j][k]);}}}ans = ans*Jz[i][i]%mod;}if(ans==0){printf("0\n");continue;}n += 1;for(i=1;i<=n;i++)ans = ans*jc[out[i]-1]%mod;ans = ans*out[1]%mod;printf("%lld\n", ans);}return 0;
}
/*
3
2 2 3
1 1
1 1
*/

BEST定理:有向图欧拉回路个数(bzoj 3659: Which Dreamed It)相关推荐

  1. 有向图生成树个数(bzoj 4894: 天赋)

    4894: 天赋 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 101  Solved: 77 [Submit][Status][Discuss] ...

  2. poj 1386 Play on Words(有向图欧拉回路)

    1 /* 2 题意:单词拼接,前一个单词的末尾字母和后一个单词的开头字母相同 3 思路:将一个单词的开头和末尾单词分别做两个点并建一条有向边!然后判断是否存在欧拉回路或者欧拉路 4 5 再次强调有向图 ...

  3. 约数定理(约数个数定理,约束和定理)

    约数个数定理: 对于一个大于1正整数n可以分解质因数: 则n的正约数的个数就是 . 其中a1.a2.a3-ak是p1.p2.p3,-pk的指数. 定理简证: 首先同上,n可以分解质因数:n=p1^a1 ...

  4. 【裴蜀定理】BZOJ 1441 MIN

    P4549 [模板]裴蜀定理 这是一道bzoj的权限题,同时又是一道luogu的模板题 在标题上写模板不是很好, 决定放bzoj的名字来撑撑场面 bzoj: 裴蜀定理:dalao题解 显然就很优秀ov ...

  5. 算法提高课-图论-欧拉回路和欧拉路径-AcWing 1184. 欧拉回路:有向图和无向图的欧拉回路

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 无向图欧拉回路:1)所有点的度都为偶数:2)所有边连通 有向图欧拉回路:1)所有点的入度等于出度:2)所有边连通 AC代码 #inc ...

  6. 约数个数定理约数和定理

    1.如果我们要求一个数的所有因数的个数会怎么去求呢? 首先想到最简单的方法就是暴力求解就可以.当然数据小.或者测试数据少就很简单就可以过了. 2.如果求一个区间内的数的所有因数的个数呢?或者求一个区间 ...

  7. bzoj3659 Which Dreamed It BEST定理(公式绝对没错doge)

    BEST定理 ec(G)=tw(G)∏u∈V(deg(u)−1)!ec(G)=t_w(G)\prod_{u \in V} (deg(u)-1)!ec(G)=tw​(G)u∈V∏​(deg(u)−1)! ...

  8. 随手记——老夫死活记不住定理

    定理: 欧拉函数:小于n的正整数中与n互质的数的数目(φ(1)=1) 若n为质数则 ,但n为合数时,并不是小于n的质数的个数,两个合数也可以互质的: 设m和n是互质的正整数,φ(mn) = φ(m) ...

  9. 模板 - 欧拉路、欧拉回路(一笔画问题)

    整理的算法模板合集: ACM模板 目录 非递归版 普通递归版 HierholzersHierholzersHierholzers算法(输出字典序最小的答案) FleuryFleuryFleury算法 ...

最新文章

  1. 基于VLC的rtsp服务器linux平台搭建
  2. 《设计模式》一书PPT浏览及下载地址
  3. Eclipse、NetBeans、IntelliJ集成开发工具 Java IDE
  4. 网页直播中推流组件EasyRTM推送RTMP扩展支持HEVC(H265)
  5. PHP 学习总结之变量
  6. Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'的解决
  7. 有关[Http持久连接]的一切,卷给你看
  8. Android之ndk-build -j4
  9. 带有Python示例的math.sin()方法
  10. lua编译器和ide
  11. 文件存储形式的通讯录
  12. ubuntu13.10 归档管理器解压zip文件中文乱码问题的解决(亲测成功)
  13. 新版火狐 拖 功能_Firefox 3:新功能,新功能和新功能
  14. 缅怀过往_飘云羽逸_新浪博客
  15. Shell发送邮件+附件
  16. Shiro安全框架(Shiro与SpringBoot整合开发)之图片验证码(五)
  17. PDF文件有修改权限如何取消
  18. 中国车用改性塑料市场深度调研与投资战略报告(2022版)
  19. 浅谈HyperLogLog底层算法逻辑
  20. CocosCreater 发布微信小游戏 真机调试 找不到json 以及4930错误

热门文章

  1. 10.java之父被B站学习者下载达7000万次的Java视频教程你还没有看过知乎
  2. vue前端动态分页模板(记录)
  3. MySQL 8.0安装记录
  4. 关于<meta name=“viewport“ content=“width=device-width,initial-scake=1.0, maximum-scale=1.0,user-s..“>
  5. 【java笔记】TCP通信程序
  6. 【数据结构和算法笔记】:数据结构概述
  7. 传媒大学媒体中心资源批量获取工具的制作
  8. mysql 储存过程放到哪_MySQL储存过程
  9. pythonos模块_python的io模块和os模块有什么区别
  10. qqwry.dat java 乱码_UTF-8使用纯真IP数据库乱码问题