矩阵树定理+模意义下整数高斯消元

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
int n, uu, vv, ww, w[21][21];
const int mod=1e9+7;
vector<pii> vec[21];
int getGcd(int a, int b){
return !b?a:getGcd(b, a%b);
}
int getLcm(int a, int b){
return a/getGcd(a, b)*b;
}
int gauss(){
int bei=1;
for(int i=1; i<n; i++){
for(int j=i+1; j<n; j++){
while(w[j][i]){
ll t=w[i][i]/w[j][i];
for(int k=i; k<n; k++)
w[i][k] = (w[i][k] - (ll)w[j][k]*t%mod + mod) % mod;
swap(w[i], w[j]);
bei *= -1;
}
}
if(!w[i][i]) return 0;
}
for(int i=1; i<n; i++)
bei = (ll)bei * w[i][i] % mod;
return bei;
}
int main(){
cin>>n;
for(int i=1; i<n; i++){
scanf("%d", &ww);
while(ww--){
scanf("%d %d", &uu, &vv);
vec[i].push_back(make_pair(uu, vv));
}
}
int ans=0;
for(int i=0; i<(1<<(n-1)); i++){//i: which companys don't xiujian
memset(w, 0, sizeof(w));
int cnt=0;
for(int j=1; j<n; j++)
if(!(i&(1<<(j-1)))){
cnt++;
for(int k=0; k<vec[j].size(); k++){
uu = vec[j][k].first; vv = vec[j][k].second;
w[uu][uu]++; w[vv][vv]++;
w[uu][vv]--; w[vv][uu]--;
}
}
int re=gauss();
cnt = n - 1 - cnt;
if(cnt&1) re *= -1;
ans = (ans + re) % mod;
ans = (ans + mod) % mod;
}
cout<<ans<<endl;
return 0;
}

loj2027 「SHOI2016」黑暗前的幻想乡的更多相关文章

  1. 「SHOI2016」黑暗前的幻想乡 解题报告

    「SHOI2016」黑暗前的幻想乡 sb题想不出来,应该去思考原因,而不是自暴自弃 一开始总是想着对子树做dp,但是状态压不起去,考虑用容斥消减一些条件变得好统计,结果越想越乱. 期间想过矩阵树定理, ...

  2. 【LOJ】#2027. 「SHOI2016」黑暗前的幻想乡

    题解 我一开始写的最小表示法写的插头dp,愉快地TLE成60分 然后我觉得我就去看正解了! 发现是容斥 + 矩阵树定理 矩阵树定理对于有重边的图只要邻接矩阵的边数设置a[u][v]表示u,v之间有几条 ...

  3. 「SHOI2016」黑暗前的幻想乡

    题目链接 戳我 \(Describe\) \(n−1\)个公司,每个公司能修一些边,求每条边都让不同的公司来修的生成树的方案数 \(Solution\) 这道题很明显容斥.答案就是:所有都选的生成树个 ...

  4. Solution -「SHOI2016」「洛谷 P4336」黑暗前的幻想乡

    \(\mathcal{Description}\)   link.   有一个 \(n\) 个结点的无向图,给定 \(n-1\) 组边集,求从每组边集选出恰一条边最终构成树的方案树.对 \(10^9+ ...

  5. 【SHOI2016】黑暗前的幻想乡

    题面 题解 如果没有建筑公司的限制,那么就是个\(\mathrm{Matrix\;tree}\)板子 其实有了也一样 发现\(n\leq 17\),考虑容斥 每次钦定一些建筑公司,计算它们包含的边的生 ...

  6. bzoj 4596 [Shoi2016]黑暗前的幻想乡 矩阵树定理+容斥

    4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 559  Solved: 325[Submit][Sta ...

  7. bzoj4596[Shoi2016]黑暗前的幻想乡 Matrix定理+容斥原理

    4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 464  Solved: 264[Submit][Sta ...

  8. [ZJOI2016]小星星&[SHOI2016]黑暗前的幻想乡(容斥)

    这两道题思路比较像,所以把他们放到一块. [ZJOI2016]小星星 题目描述 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细线连着两颗小星星. ...

  9. P4336 [SHOI2016]黑暗前的幻想乡

    P4336 [SHOI2016]黑暗前的幻想乡 矩阵树定理(高斯消元+乘法逆元)+容斥 ans=总方案数 -(公司1未参加方案数 ∪ 公司2未参加方案数 ∪ 公司3未参加方案数 ∪ ...... ∪ ...

随机推荐

  1. JAVA常量介绍

    常量: 在程序执行过程中,其值不发生改变的量: 1.分类:     字面值常量和自定义常量: 1.字面值常量有以下几种: 字符串常量.小数常量.整数常量.字符常量.布尔常量(true.false).空 ...

  2. js浮点数计算(加,减)

    最近工作中经常遇到需要处理浮点型计算的问题,开始一直都在用把浮点数先乘以10的对应小数的位数的次方化成整数再去开始计算. 例如100.01+100.02,可以化成(100.01*100+100.02* ...

  3. Kendo MVVM 数据绑定(七) Invisible/Visible

    Kendo MVVM 数据绑定(七) Invisible/Visible Invisible/Visible 绑定可以根据 ViewModel 的某个属性来显示/隐藏 DOM 元素.例如: <d ...

  4. 准备Kendo UI 开发环境

    准备 首先你需要从 Telerik 网站下载试用版开发包,注意需要注册后才能下载. 下载后直接解压后包含下面几个文件和目录: ./examples – 示例. /js – minified 化后的 J ...

  5. Android安卓电话拦截及短信过滤

    package com.focus.manager; import java.lang.reflect.Method; import Android .app.Activity; import And ...

  6. 加载动画插件spin.js的使用随笔

    背景: 在请求后台的“漫长”等待过程中,为了提升用户体验,需要一个类似  的加载动画效果,让用户明确现在处于请求过程中,而不是机子down掉或者网站死了 静态demo(未与后台交互): HTML代码如 ...

  7. python实现单链表翻转

    题目描述: 翻转一个链表 您在真实的面试中是否遇到过这个题? Yes 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null 挑 ...

  8. 【转】Intellij IDEA 提交代码到远程GitHub仓库

    1.文章参考自:http://my.oschina.net/lujianing/blog/180728 2.设置相关绑定 Settings——Version Control——Git——Path to ...

  9. 关于java字符串常量池

    今天发现一个好玩的东西 public static void main(String[] args)    {        String str1 = new StringBuilder(" ...

  10. Python——三目运算符

    一.三目运算符 1.if语句三目运算符语法格式 Python可以通过if'语句来实现三目运算符的功能,因此可以把这种if语句当做三目运算符,具体语法格式如下: 返回True执行 if 表达式 else ...