bzoj 4596 [Shoi2016]黑暗前的幻想乡 矩阵树定理+容斥
4596: [Shoi2016]黑暗前的幻想乡
Time Limit: 20 Sec Memory Limit: 256 MB
Submit: 559 Solved: 325
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
2 3 2 4 2
5 2 1 3 1 3 2 4 1 4 3
4 2 1 3 2 4 1 4 2
Sample Output
HINT
Source
容斥一下让哪几个公司来修就可以了,然后每次矩阵树定理求一下方案树就可以了。
这里是直接高斯消元的,没有辗转相除的形式,但是好像矩阵树是保证还是桌面回事,不需要的。
#pragma GCC optimize(2)
#pragma G++ optimize(2)
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring> #define ll long long
#define N 22
#define mod 1000000007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')f=-;ch=getchar();}
while(isdigit(ch)){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n;
int a[N][N],f[N][N],ans;
int cnt,hed[N];
struct Node
{
int x,y,nxt;
}e[]; void add(int u,int x,int y)
{
e[++cnt].x=x;
e[cnt].y=y;
e[cnt].nxt=hed[u];
hed[u]=cnt;
}
int cal(int num)//矩阵树定理是每个点的度,若x-y有边则x,y -1,y,x -1然后消去一行,下三角消元
{
//这里好处是num为n-1了,已经减去一行了。
for (int i=;i<=num;i++)
for (int j=;j<=num;j++)
a[i][j]=f[i][j];
int ans=;
for (int i=;i<=num;i++)
{
for (int j=i+;j<=n;j++)
while(a[j][i])
{
int t=a[i][i]/a[j][i];
for (int k=i;k<=n;k++)a[i][k]=(a[i][k]-(ll)a[j][k]*t%mod)%mod;
for (int k=i;k<=n;k++)swap(a[i][k],a[j][k]);
ans=-ans;//ans去反是因为斜对角线上负数的个数
}
if(!a[i][i])return ;
ans=(ll)ans*a[i][i]%mod;
}
return ans;
}
void dfs(int x,int y)
{
if (x==n)//就n-1个人
{
(ans+=y*cal(n-))%=mod;
return;
}
dfs(x+,y); for (int i=hed[x];i!=-;i=e[i].nxt)
{
int u=e[i].x,v=e[i].y;
f[u][u]--,f[v][v]--,f[u][v]++,f[v][u]++;
}
dfs(x+,-y);
for (int i=hed[x];i!=-;i=e[i].nxt)
{
int u=e[i].x,v=e[i].y;
f[u][u]++,f[v][v]++,f[u][v]--,f[v][u]--;
}
}
int main()
{
memset(hed,-,sizeof(hed));
n=read();
for (int i=;i<n;i++)
{
int number=read();
for (int j=;j<=number;j++)
{
int x=read(),y=read();
add(i,x,y);
f[x][x]++,f[y][y]++,f[x][y]--,f[y][x]--;
}
}
dfs(,);
printf("%d\n",(ans%mod+mod)%mod);
}
bzoj 4596 [Shoi2016]黑暗前的幻想乡 矩阵树定理+容斥的更多相关文章
- [SHOI2016] 黑暗前的幻想乡 - 矩阵树定理,容斥
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 20; const in ...
- bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥)
bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥) bzoj Luogu 题解时间 看一看数据范围,求生成树个数毫无疑问直接上矩阵树定理. 但是要求每条边都 ...
- Luogu P4336 [SHOI2016]黑暗前的幻想乡 矩阵树定理+容斥原理
真是菜到爆炸....容斥写反(反正第一次写qwq) 题意:$n-1$个公司,每个公司可以连一些边,求每个边让不同公司连的生成树方案数. 矩阵树定理+容斥原理(注意到$n$不是很大) 枚举公司参与与否的 ...
- 【BZOJ4596】【Luogu P4336】 [SHOI2016]黑暗前的幻想乡 矩阵树定理,容斥
同样是矩阵树定理的裸题.但是要解决它需要能够想到容斥才可以. \(20\)以内的数据范围一定要试试容斥的想法. #include <bits/stdc++.h> using namespa ...
- BZOJ 4596: [Shoi2016]黑暗前的幻想乡
Sol 容斥原理+Matrix-Tree定理.容斥跟小星星那道题是一样的,然后...直接Matrix-Tree定理就可以了... 复杂度\(O(2^{n-1}n^3)\) PS:调了好久啊QAQ 明明 ...
- ●BZOJ 4596 [Shoi2016]黑暗前的幻想乡
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4596 题解: 容斥,矩阵树定理,矩阵行列式 先说说容斥:(一共有 N-1个公司) 令 f[i ...
- bzoj 4596: [Shoi2016]黑暗前的幻想乡【容斥原理+矩阵树定理】
真是简单粗暴 把矩阵树定理的运算当成黑箱好了反正我不会 这样我们就可以在O(n^3)的时间内算出一个无向图的生成树个数了 然后题目要求每个工程队选一条路,这里可以考虑容斥原理:全选的方案数-不选工程队 ...
- BZOJ 4596: [Shoi2016]黑暗前的幻想乡(容斥+Matrix_Tree)
传送门 解题思路 看到计数想容斥--\(from\) \(shadowice1984\)大爷.首先求出原图的生成树个数比较容易,直接上矩阵树定理,但这样会多算一点东西,会把\(n-2\)个公司的多算进 ...
- 【BZOJ 4596】 4596: [Shoi2016]黑暗前的幻想乡 (容斥原理+矩阵树定理)
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 324 Solved: 187 Description ...
随机推荐
- Java数据持久层框架 MyBatis之背景知识二
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- g4e基础篇#6 了解Git历史记录
章节目录 前言 1. 基础篇: 为什么要使用版本控制系统 Git 分布式版本控制系统的优势 Git 安装和设置 了解Git存储库(Repo) 起步 1 – 创建分支和保存代码 起步 2 – 了解Git ...
- 顺序一致性内存模型与JMM的“顺序一致性”
顺序一致性内存模型是一个被计算机科学家理想化了的理论参考模型,它为程序员提供了极强的内存可见性保证.顺序一致性内存模型有两大特性.1)一个线程中的所有操作必须按照程序的顺序来执行.2)(不管程序是否同 ...
- 修改Weblogic jdk版本
找到 F:\Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\bin setDomainEnv.cmd
- Discuz论坛URL静态化规则urlrewrite
http://blog.csdn.net/u014181418/article/details/53467980 1.在论坛代码目录下新建文件".htaccess" vim /us ...
- python 操作python
#!/usr/bin/env python#_*_ coding:utf-8 _*_ import MySQLdb # 打开门conn = MySQLdb.connect(host='192.168. ...
- C#动态设置匿名类型对象的属性
用C#写WPF程序, 实现功能的过程中碰到一个需求: 动态设置对象的属性,属性名称是未知的,在运行时才能确定. 本来这种需求可以用 Dictionary<string, object> 实 ...
- POI--HSSFCellStyle类
通过POI来进行单元格格式的设定 设定格式使用「HSSFCellStyle」类.它有一个构造方法: protected HSSFCellStyle(short index, ExtendedForma ...
- SQL查询系列1---
1.查询关系为夫妻,年龄相加大于60的信息 表1 信息表 info id 编号 sex 性别 0-女,1-男 age 年龄 表2 关系表 rel id1 编号1 外键 id2 编号2 外键 r ...
- 浅谈WPF依赖项属性
浅谈WPF依赖项属性 0. 引言 依赖项属性虽然在使用上和CLR属性一样,但是它是WPF特有的,不同于CLR属性.只是封装为我们常用CLR的属性,在语法使用上和CLR属性一样.WPF中一些功能:动画, ...