BZOJ3659 : Which Dreamed It
首先判断一下是否无解,并剔除孤立点。
根据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的更多相关文章
- 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 ) # ...
- 【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 ...
- English trip M1 - AC11 I Dreamed a Dream? 我做了一个梦 Teacher:Lamb
In this lesson you will learn to describe an experience. 这节课你讲学习到描述经历 课上内容(Lesson) 词汇(Key Word ) 句型 ...
- 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 ...
- python基础-文件操作
一.文件操作 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r ,只读模式[默认模式,文件必须存在,不存在则抛出异 ...
- Python之路,Day3 - Python基础3
一.文件操作 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- Python之路第一课Day3--随堂笔记(文件操作)
一.集合的介绍 1.集合操作 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = se ...
- Python之路第一课Day2--随堂笔记
入门知识拾遗 一.bytes类型 bytes转二进制然后转回来 msg="张杨" print(msg) print(msg.encode("utf-8")) p ...
- 第一篇英文短文《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 ...
随机推荐
- 关于KVC、KVO
KVC/KVO --------------------KVC--键值编码-------------------作用:通过字符串来描述对象的属性间接修改对象的属性 Student *stu=[[Stu ...
- ALT+数字直接取得字符的原理
字符 字节码 utf-8编码 机器二进制码 之间的联系 byte数组与二进制码关系参考文献 例如:字符“我” byte字节码是 [-26, -120, -111] 绝对值源码 [00011010, 0 ...
- adb device 调试
1. kill掉占用adb端口的进程 netstat -aon|findstr "5037" TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 6540 ...
- NYOJ题目1082买新书了
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsoAAAI5CAIAAAA38ougAAAgAElEQVR4nO3dPVLjStsG4G8T5CyE2A
- Java 解析XML的几种方法
XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便. XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已. 基本的解析方式 ...
- Sencha Architect 安装与使用
http://www.sencha.com/products/touch/ Sencha SDK Tools Advanced JavaScript and CSS Project Build Too ...
- 蛋疼的Fedora17
在公司给同事要安装ASM oracle 11g,说要在forder17上安装,于是乎我先在自己的虚拟机上安装了一个forder17,遇到了几个很蛋疼的问题: 1. 安装的时候没有创建普通用户 ...
- BI 项目管理之生命周期跟踪和任务区域
DW/BI 系统是复杂的实体,构建这种系统的方法必须有助于简化复杂性.13 个方框显示了构建成功的数据仓库的主要任务区域,以及这些任务之间的主要依赖关系. 在生命周期这一级可以进行多方观察 ...
- h5 range应用 透明度+RGB
透明度 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- Win10 for Phone 裁剪控件
<Page.BottomAppBar> <CommandBar x:Name="appBar"> <AppBarButton Label=" ...