首先判断一下是否无解,并剔除孤立点。

根据best theorem,有向图中以$i$为起点的欧拉回路个数为:

以$i$为根的树形图个数$\times\prod_{i=1}^n (deg(i)-1)!$。

根据matrix tree theorem,以$i$为根的树形图个数$=$基尔霍夫矩阵去掉第$i$行第$i$列的行列式。

$ans=以1为起点的欧拉回路个数\times 1的度数$。

高斯消元即可,时间复杂度$O(n^3\log P)$。

#include<cstdio>
typedef long long ll;
const int N=110,M=200010,P=1000003;
int n,m,i,j,k,x,y,in[N],ou[N],vis[N],g[N][N];ll f[M],a[N][N],ans;
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
void dfs(int x){
vis[x]=++m;
for(int i=1;i<=n;i++)if(g[x][i]&&!vis[i])dfs(i);
}
inline void swap(ll&a,ll&b){ll c=a;a=b;b=c;}
ll det(int n){
ll ans=1;bool flag=1;
for(i=1;i<=n;i++)for(j=1;j<=n;j++)a[i][j]=(a[i][j]%P+P)%P;
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++)while(a[j][i]){
ll t=a[i][i]/a[j][i];
for(k=i;k<=n;k++)a[i][k]=(a[i][k]+P-t*a[j][k]%P)%P;
for(k=i;k<=n;k++)swap(a[i][k],a[j][k]);
flag^=1;
}
ans=ans*a[i][i]%P;
if(!ans)return 0;
}
if(!flag)ans=P-ans;
return ans;
}
int solve(){
for(m=0,i=1;i<=n;i++)in[i]=ou[i]=vis[i]=0;
for(i=0;i<=n;i++)for(j=0;j<=n;j++)a[i][j]=g[i][j]=0;
int ed=0;
for(i=1;i<=n;i++)for(read(k);k--;g[i][j]++)read(j),ed++;
for(dfs(i=1);i<=n;i++)if(!vis[i]&&g[i])return 0;
for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(g[i][j]){
x=vis[i],y=vis[j];
ou[x]+=g[i][j];in[y]+=g[i][j];
a[x-1][y-1]-=g[i][j],a[x-1][x-1]+=g[i][j];
}
for(i=1;i<=m;i++)if(in[i]!=ou[i])return 0;
if(m==1)return f[g[1][1]];
ans=det(m-1)*in[1];
for(i=1;i<=m;i++)ans=ans*f[in[i]-1]%P;
return ans;
}
int main(){
for(f[0]=i=1;i<M;i++)f[i]=f[i-1]*i%P;
while(1){
read(n);
if(!n)return 0;
printf("%d\n",solve());
}
}

  

BZOJ3659 : Which Dreamed It的更多相关文章

  1. English trip V1 - 21. I dreamed dream Teacher:Corrine Key: past tense(过去式)

    In this lesson you will learn to describe an experience.  本课将会学习描述一次经历 课上内容(Lesson) 词汇(Key Word ) # ...

  2. 【BZOJ 3659】 3659: Which Dreamed It (Matrix-Tree&BEST theorem )

    3659: Which Dreamed It Time Limit: 20 Sec  Memory Limit: 1024 MBSubmit: 134  Solved: 41 Description ...

  3. English trip M1 - AC11 I Dreamed a Dream? 我做了一个梦 Teacher:Lamb

    In this lesson you will learn to describe an experience.  这节课你讲学习到描述经历 课上内容(Lesson) 词汇(Key Word ) 句型 ...

  4. Lesson 22 A glass envolops

    Text My daughter, Jane, never dreamed of receiving a letter from a girl of her own age in Holland. L ...

  5. python基础-文件操作

    一.文件操作 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r ,只读模式[默认模式,文件必须存在,不存在则抛出异 ...

  6. Python之路,Day3 - Python基础3

    一.文件操作 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  7. Python之路第一课Day3--随堂笔记(文件操作)

    一.集合的介绍 1.集合操作 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = se ...

  8. Python之路第一课Day2--随堂笔记

    入门知识拾遗 一.bytes类型 bytes转二进制然后转回来 msg="张杨" print(msg) print(msg.encode("utf-8")) p ...

  9. 第一篇英文短文《It All Starts With A Dream》

    http://www.ximalaya.com/#/17209107/sound/6883165 Dreaming. Do you or don’t you? Do you dream about t ...

随机推荐

  1. NYOJ题目813对决

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAssAAALRCAIAAAAiJ3lxAAAgAElEQVR4nO3dPW7jSgMu6LsJ516IYy

  2. route netstat -rn

    -n :不要使用通讯协定或主机名称,直接使用ip或port number; -ee:使用更详细的资讯来显示 [root@NB data]# route -nee Kernel IP routing t ...

  3. EF – 7.一对多关联

    5.6.8 <一对多关联(上)> 5.6.9 <一对多关联(下)> 一对多的关联,可以说是整个数据库应用程序中最常见的一种关联类型了,因此,必须高度重视这种关联类型CRUD的实 ...

  4. MVC – 8.Razor 布局

    8.1.@RenderBody() 8.2.多个"占位符":@RenderSection() 8.3.js合并 @Scripts.Render("~/bundles/js ...

  5. MyBatis 特殊字符处理

    http://blog.csdn.net/zheng0518/article/details/10449549

  6. WPF样式

    <Window x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsoft.com/winf ...

  7. C#的初始化器

    using System; using System.Collections; using System.Collections.Generic; using System.IO; using Sys ...

  8. 使用Timer和ScheduledThreadPoolExecutor执行定时任务

    Java使用Timer和ScheduledThreadPoolExecutor执行定时任务 定时任务是在指定时间执行程序,或周期性执行计划任务.Java中实现定时任务的方法有很多,主要JDK自带的一些 ...

  9. 个推+DCLOUD,推送消息和透传消息

    DCLOUD方案中集成了个推方案,最好是用个推来做推送相关的东西 消息分2类: 1.推送消息,这种一般会出现在手机的最上面的通知栏,用户是肯定会知道的 2.透传消息,这种一般就是一个Alert提示框, ...

  10. Linux 标准目录结构

    初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp ...