[洛谷U22156]未曾届到游览(矩阵树定理)
题目背景
又到了某任*堂开关中学一年一度的自主招生考试的时间了,在考试完后许多家长决定带着自己的孩子参观一下这所距千年名校还有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 ;
输入输出样例
说明
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代码:
# include <cstdio>
# include <cstring>
# include <vector>
# include <iostream>
using namespace std;
typedef long long LL;
const LL mod = 1e9 + ;
void read(int &x)
{
x = ;char i = getchar();
while(!isdigit(i))i = getchar();
while(isdigit(i))x = x * + i - '',i = getchar();
}
LL Inc(LL x,LL y){return (x + y + mod) % mod;}
LL Dec(LL x,LL y){return (x - y + mod) % mod;}
LL mul(LL x,LL y){return (x * y % mod + mod) % mod;}
LL a[][],ans;int n,m;
LL inv(LL x)
{ LL v = ;
for(int i = mod - ;i;i >>= ,x = mul(x,x))if(i & )v = mul(v,x);
return v;
}
LL Gauss()
{
LL ret = ;
for(int i = ;i < n;i++)
{
int p = i;
for(int j = i + ;j < n;j++)if(a[j][i] > a[p][i])p = j;
if(p != i)swap(a[p],a[i]),ret = -ret;
if(!a[i][i])return ;
for(int j = i + ;j < n;j++)
{
LL t = a[j][i] * inv(a[i][i]) % mod;
for(int k = ;k < n;k++)
a[j][k] = Dec(a[j][k],mul(t,a[i][k]));
}
}
for(int i = ;i < n;i++)ret = mul(ret,a[i][i]);
return ret;
}
int main()
{
read(n);read(m);int x,y,A,B;LL ret = ;
for(int i = ;i <= m;i++)
{
read(x);read(y);read(A);read(B);
ret = mul(ret,B);
a[x][y] = Inc(a[x][y],mul(A,inv(B)));
a[y][x] = Inc(a[y][x],mul(A,inv(B)));
}
for(int i = ;i <= n;i++)
for(int j = ;j <= n;j++)
if(i != j)a[i][i] = Inc(a[i][i],a[i][j]),a[i][j] = mul(-,a[i][j]);
printf("%lld\n",mul(ret,Gauss()));
}
[洛谷U22156]未曾届到游览(矩阵树定理)的更多相关文章
- 洛谷4208 JSOI2008最小生成树计数(矩阵树定理+高斯消元)
qwq 这个题目真的是很好的一个题啊 qwq 其实一开始想这个题,肯定是无从下手. 首先,我们会发现,对于无向图的一个最小生成树来说,只有当存在一些边与内部的某些边权值相同的时候且能等效替代的时候,才 ...
- 洛谷 P4336 黑暗前的幻想乡 —— 容斥+矩阵树定理
题目:https://www.luogu.org/problemnew/show/P4336 当作考试题了,然而没想出来,呵呵. 其实不是二分图完美匹配方案数,而是矩阵树定理+容斥... 就是先放上所 ...
- 洛谷 P5406 - [THUPC2019]找树(FWT+矩阵树定理)
题面传送门 首先看到这道题你必须要有一个很清楚的认识:这题新定义的 \(\oplus\) 符号非常奇怪,也没有什么性质而言,因此无法通过解决最优化问题的思路来解决这个问题,只好按照计数题的思路来解决, ...
- 洛谷 P3377 【模板】左偏树(可并堆)
洛谷 P3377 [模板]左偏树(可并堆) 题目描述 如题,一开始有N个小根堆,每个堆包含且仅包含一个数.接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或 ...
- 洛谷P3377 【模板】左偏树(可并堆) 题解
作者:zifeiy 标签:左偏树 这篇随笔需要你在之前掌握 堆 和 二叉树 的相关知识点. 堆支持在 \(O(\log n)\) 的时间内进行插入元素.查询最值和删除最值的操作.在这里,如果最值是最小 ...
- 【BZOJ3534】重建(矩阵树定理)
[BZOJ3534]重建(矩阵树定理) 题面 BZOJ 洛谷 题解 这.... 矩阵树定理神仙用法???? #include<iostream> #include<cmath> ...
- 【BZOJ5297】【CQOI2018】社交网络(矩阵树定理)
[BZOJ5297][CQOI2018]社交网络(矩阵树定理) 题面 BZOJ 洛谷 Description 当今社会,在社交网络上看朋友的消息已经成为许多人生活的一部分.通常,一个用户在社交网络上发 ...
- 【BZOJ4031】小Z的房间(矩阵树定理)
[BZOJ4031]小Z的房间(矩阵树定理) 题面 BZOJ 洛谷 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子 ...
- 【SPOJ】Highways(矩阵树定理)
[SPOJ]Highways(矩阵树定理) 题面 Vjudge 洛谷 题解 矩阵树定理模板题 无向图的矩阵树定理: 对于一条边\((u,v)\),给邻接矩阵上\(G[u][v],G[v][u]\)加一 ...
随机推荐
- TFS2010单独安装配置tfs build server
记录一下确实很磨人. 同样硬件和软件环境的两台服务器,其中一台服务器很久之前就配置好了tfs2010 build ,然后最近想再配置一台tfs build server,但是按照以前的配置流程始终提示 ...
- Web服务器安全设置
Web服务器安全方面一直重视程度不够,是各种网站经常被黑的主要原因.下面笔者总结了一下关于怎样保证Web服务器安全的措施,希望能给那些服务器尚存在漏洞的用户提供一些帮助. 本文主要以Windows s ...
- ASP.NET Core 企业级开发架构简介及框架汇总 (转载)
ASP.NET Core 企业开发架构概述 企业开发框架包括垂直方向架构和水平方向架构.垂直方向架构是指一个应用程序的由下到上叠加多层的架构,同时这样的程序又叫整体式程序.水平方向架构是指将大应用分成 ...
- 常用的-->查找算法与排序算法
顺序查找 从列表第一个元素开始,顺序进行搜索,直到找到为止. 二分查找 从有序列表的候选区data[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半. li = [1, 2, ...
- Postman 安装及使用入门教程 | 前后台 写接口的 徐工给的
https://www.cnblogs.com/mafly/p/postman.html
- 枚举 || CodeForces 742B Arpa’s obvious problem and Mehrdad’s terrible solution
给出N*M矩阵,对于该矩阵有两种操作: 1.交换两列,对于整个矩阵只能操作一次 2.每行交换两个数. 交换后是否可以使每行都递增. *解法:N与M均为20,直接枚举所有可能的交换结果,进行判断 每次枚 ...
- Vickers Vane Pump - Hydraulic Vane Pump Failure: Cavitation, Mechanical Damage
One of our readers recently wrote to me about the following questions: “Recently, we purchased a sec ...
- git-忽略文件改动不进行提交
命令:git update-index --assume-unchanged 文件名 作用:忽略文件的改动,但是不加入.gitignore 文件中,这样可以达到仅在本地目录中忽略,不影响其他团队成员的 ...
- 性能测试,如何得到大量token,并保存在本地文件中
需求:性能测试需要大量的token,模拟登陆 设计思路: 1.使用语言:python +request+正则匹配+写入本地 2.jmeter+函数助手+正则或者json/yaml+后置处理器beans ...
- 彻底卸载WIN10 OneDrive
彻底卸载WIN10 OneDrive @ECHO OFF %SystemRoot%\SysWOW64\OneDriveSetup.exe /uninstall RD "%UserProfil ...