题目背景


又到了某任*堂开关中学一年一度的自主招生考试的时间了,在考试完后许多家长决定带着自己的孩子参观一下这所距千年名校还有890周年的百年学校;

题目描述


这所学校的布局非常奇怪,是一个由N 个点M 条边构成的无向图,既然来了肯定要把学校逛完.

家长们的思路也非常清奇,带孩子走过的边刚好有n-1 条,并且这n-1 条边构成了原图的一棵生成树。 每条边上所能看到的风景有两个固定的价值A 和B ,走了这条边就只能得到这条边的A价值,而没走的边就只能得到那条边的B 价值,每个家庭最终看到的总价值的具体算法为所有走过的边的A 值的乘积*所有没选的边的B 值的乘积;

zackzh当年并没有游览学校,所以他想知道所有可能走出的所有生成树的总价值和MOD1e9+7;

输入输出格式


输入格式:

第11 行两个个整数N 与M ,接下来M 每行四个整数U ,V ,A ,B 描述一条边;

输出格式:


仅一个整数,即可能走出的所有生成树的总价值和MOD1e9+7 ;

输入输出样例


输入样例#1:

  1.  
输出样例#1: 

  1.  

说明


N<=500,M<=200000,A,B<=10;

%10数据满足 N = 3 M = 12

另有%10数据满足N = 12 M = 50

另有%10数据满足N = 500 M = 499

另有%10数据满足N = 500 M = 1000

另有%10数据满足 N = 500 M = 100000

剩下%50 数据满足N = 500 M = 200000

对于%100数据满足1<=A,B<=10

分析:


就是考察了一下对矩阵树定理的理解。

在矩阵树定理树一棵生成树的权值求出的其实是它所有边的乘积,

矩阵树定理就求出了所有生成树的权值和。

将边权设为1就可以求出生成树个数。

这道题我们可以把生成树权值设为A / B,设所有边B乘积为ret

那么最终答案就是矩阵树定理求出来的值*ret了。

对于逆元用费马小定理就好了。

AC代码:


  1. # include <cstdio>
  2. # include <cstring>
  3. # include <vector>
  4. # include <iostream>
  5. using namespace std;
  6. typedef long long LL;
  7. const LL mod = 1e9 + ;
  8. void read(int &x)
  9. {
  10. x = ;char i = getchar();
  11. while(!isdigit(i))i = getchar();
  12. while(isdigit(i))x = x * + i - '',i = getchar();
  13. }
  14. LL Inc(LL x,LL y){return (x + y + mod) % mod;}
  15. LL Dec(LL x,LL y){return (x - y + mod) % mod;}
  16. LL mul(LL x,LL y){return (x * y % mod + mod) % mod;}
  17. LL a[][],ans;int n,m;
  18. LL inv(LL x)
  19. { LL v = ;
  20. for(int i = mod - ;i;i >>= ,x = mul(x,x))if(i & )v = mul(v,x);
  21. return v;
  22. }
  23. LL Gauss()
  24. {
  25. LL ret = ;
  26. for(int i = ;i < n;i++)
  27. {
  28. int p = i;
  29. for(int j = i + ;j < n;j++)if(a[j][i] > a[p][i])p = j;
  30. if(p != i)swap(a[p],a[i]),ret = -ret;
  31. if(!a[i][i])return ;
  32. for(int j = i + ;j < n;j++)
  33. {
  34. LL t = a[j][i] * inv(a[i][i]) % mod;
  35. for(int k = ;k < n;k++)
  36. a[j][k] = Dec(a[j][k],mul(t,a[i][k]));
  37. }
  38. }
  39. for(int i = ;i < n;i++)ret = mul(ret,a[i][i]);
  40. return ret;
  41. }
  42. int main()
  43. {
  44. read(n);read(m);int x,y,A,B;LL ret = ;
  45. for(int i = ;i <= m;i++)
  46. {
  47. read(x);read(y);read(A);read(B);
  48. ret = mul(ret,B);
  49. a[x][y] = Inc(a[x][y],mul(A,inv(B)));
  50. a[y][x] = Inc(a[y][x],mul(A,inv(B)));
  51. }
  52. for(int i = ;i <= n;i++)
  53. for(int j = ;j <= n;j++)
  54. if(i != j)a[i][i] = Inc(a[i][i],a[i][j]),a[i][j] = mul(-,a[i][j]);
  55. printf("%lld\n",mul(ret,Gauss()));
  56. }

[洛谷U22156]未曾届到游览(矩阵树定理)的更多相关文章

  1. 洛谷4208 JSOI2008最小生成树计数(矩阵树定理+高斯消元)

    qwq 这个题目真的是很好的一个题啊 qwq 其实一开始想这个题,肯定是无从下手. 首先,我们会发现,对于无向图的一个最小生成树来说,只有当存在一些边与内部的某些边权值相同的时候且能等效替代的时候,才 ...

  2. 洛谷 P4336 黑暗前的幻想乡 —— 容斥+矩阵树定理

    题目:https://www.luogu.org/problemnew/show/P4336 当作考试题了,然而没想出来,呵呵. 其实不是二分图完美匹配方案数,而是矩阵树定理+容斥... 就是先放上所 ...

  3. 洛谷 P5406 - [THUPC2019]找树(FWT+矩阵树定理)

    题面传送门 首先看到这道题你必须要有一个很清楚的认识:这题新定义的 \(\oplus\) 符号非常奇怪,也没有什么性质而言,因此无法通过解决最优化问题的思路来解决这个问题,只好按照计数题的思路来解决, ...

  4. 洛谷 P3377 【模板】左偏树(可并堆)

    洛谷 P3377 [模板]左偏树(可并堆) 题目描述 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或 ...

  5. 洛谷P3377 【模板】左偏树(可并堆) 题解

    作者:zifeiy 标签:左偏树 这篇随笔需要你在之前掌握 堆 和 二叉树 的相关知识点. 堆支持在 \(O(\log n)\) 的时间内进行插入元素.查询最值和删除最值的操作.在这里,如果最值是最小 ...

  6. 【BZOJ3534】重建(矩阵树定理)

    [BZOJ3534]重建(矩阵树定理) 题面 BZOJ 洛谷 题解 这.... 矩阵树定理神仙用法???? #include<iostream> #include<cmath> ...

  7. 【BZOJ5297】【CQOI2018】社交网络(矩阵树定理)

    [BZOJ5297][CQOI2018]社交网络(矩阵树定理) 题面 BZOJ 洛谷 Description 当今社会,在社交网络上看朋友的消息已经成为许多人生活的一部分.通常,一个用户在社交网络上发 ...

  8. 【BZOJ4031】小Z的房间(矩阵树定理)

    [BZOJ4031]小Z的房间(矩阵树定理) 题面 BZOJ 洛谷 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子 ...

  9. 【SPOJ】Highways(矩阵树定理)

    [SPOJ]Highways(矩阵树定理) 题面 Vjudge 洛谷 题解 矩阵树定理模板题 无向图的矩阵树定理: 对于一条边\((u,v)\),给邻接矩阵上\(G[u][v],G[v][u]\)加一 ...

随机推荐

  1. UI常用字体定义和继承的实例,ResearchKitCode

    #import <UIKit/UIKit.h> @interface UIFont (APCAppearance) + (UIFont*) appRegularFontWithSize: ...

  2. centos启用socks5服务

    直接在终端用 root 安装 *** 官方客户端 apt-get install python-pip -ypip install shadowsocks 然后编辑 /etc/shadowsocks. ...

  3. uva820 Internet Bandwidth

    就是模板... #include<cstdio> #include<cstring> #include<vector> #include<queue> ...

  4. 总结vue2.0 配置的实例方法

    总结vue2.0 配置的实例方法 http://www.php.cn/js-tutorial-369603.html

  5. json-server && axios

    json-server && axios vue2.0项目实战(3)使用axios发送请求 https://www.cnblogs.com/zhouyangla/p/6753673.h ...

  6. Hibernate-01 入门

    学习任务 Hibernate开发环境的搭建 使用Hibernate对单表进行增删改操作 使用Hibernate按照数据表主键查询 关于Hibernate 简介 Hibernate的创始人Gavin K ...

  7. java根据freeMark模板生成内容

    根据ftl模板生成文件内容可以用来生成代码模板,如下所示: aa.ftl name : ${name} age : ${age} aa.java package mall_tools; import ...

  8. luogu P2078 朋友

    题目背景 小明在A公司工作,小红在B公司工作. 题目描述 这两个公司的员工有一个特点:一个公司的员工都是同性. A公司有N名员工,其中有P对朋友关系.B公司有M名员工,其中有Q对朋友关系.朋友的朋友一 ...

  9. 用Jenkins构建项目实战

    登录Jenkins,新建任务 输入一个任务名称,选择一个项目类型 使用自定义工作空间:使该项目独立于系统的工作空间 自动从Git下载源码,点击添加可以增加凭证 日程表的参数: 第一个参数代表的是分钟 ...

  10. 如何用纯 CSS 创作一种侧立图书的特效

    效果预览 在线演示 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/deVgRM 可交互视频教程 此视 ...