Wannafly挑战赛23F-计数【原根,矩阵树定理,拉格朗日插值】
正题
题目链接:https://ac.nowcoder.com/acm/contest/161/F
题目大意
给出nnn个点的一张图,求它的所有生成树中权值和为kkk的倍数的个数。输出答案对ppp取模
1≤n,k≤100,1≤m≤104,p∈[2,109]∩Pri1\leq n,k\leq 100,1\leq m\leq 10^4,p\in[2,10^9]\cap Pri1≤n,k≤100,1≤m≤104,p∈[2,109]∩Pri
数据保证k≡1(modp)k\equiv 1(mod\ p)k≡1(mod p)
解题思路
一个想法是把一条边权看做xwx^wxw的多项式,用矩阵树定理乘起来后kkk的倍数的系数和就是答案。
但是这样系数是nknknk个,显然搞不定。
类似于CF917D-StrangerTree的做法我们可以带入若干个值然后跑矩阵数之后求出若干个点值。
但是这里是kkk的倍数,我们要模拟卷积,可以带入kkk个ggg满足gk=1g^k=1gk=1的就可以了。
这里保证了k≡1(modp)k\equiv 1(mod\ p)k≡1(mod p),所以我们求出ppp的原根ggg然后带入gp−1k×i(i∈[0,k−1])g^{\frac{p-1}{k}\times i}(i\in[0,k-1])gkp−1×i(i∈[0,k−1])就可以了。
然后直接拉插求出x=0x=0x=0的点值就好了。
时间复杂度O(n3k)O(n^3k)O(n3k)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define ll long long
using namespace std;
const ll N=110;
struct node{ll x,y,w;
}e[N*N];
ll n,m,k,P,g,x[N],y[N];
vector<ll> p;
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
void Prime(){ll x=P-1;for(ll i=2;i*i<=x;i++)if(x%i==0){p.push_back(i);while(x%i==0)x/=i;}if(x>1)p.push_back(x);
}
bool check(ll x){for(ll i=0;i<p.size();i++)if(power(x,(P-1)/p[i])==1)return 0;return 1;
}
namespace Matrix{ll a[N][N];ll det(ll v){memset(a,0,sizeof(a));ll ans=1;for(ll i=1;i<=m;i++){ll x=e[i].x,y=e[i].y,w=power(v,e[i].w); (a[x][y]+=P-w)%=P;(a[y][x]+=P-w)%=P;(a[x][x]+=w)%=P;(a[y][y]+=w)%=P;}ll f=0;for(ll i=1;i<n;i++){for(ll j=i;j<n;j++)if(a[j][i]){if(i==j)break;swap(a[i],a[j]);f^=1;break;}ans=ans*a[i][i]%P;ll inv=power(a[i][i],P-2);for(ll j=i;j<n;j++)a[i][j]=a[i][j]*inv%P;for(ll j=i+1;j<n;j++){ll rate=P-a[j][i];for(ll k=i;k<n;k++)(a[j][k]+=rate*a[i][k])%=P;}}return f?(P-ans):ans;}
}
signed main()
{scanf("%lld%lld%lld%lld",&n,&m,&k,&P);Prime();g=1;while(!check(g))g++;for(ll i=1;i<=m;i++)scanf("%lld%lld%lld",&e[i].x,&e[i].y,&e[i].w);for(ll i=1;i<=k;i++){x[i]=power(g,(P-1)/k*(i-1));y[i]=Matrix::det(x[i]);}ll ans=0;for(ll i=1;i<=k;i++){ll tmp=1;for(ll j=1;j<=k;j++)if(i!=j)tmp=tmp*(P-x[j])%P*power(x[i]-x[j],P-2)%P;(ans+=tmp*y[i]%P)%=P;}printf("%lld\n",(ans+P)%P);return 0;
}
Wannafly挑战赛23F-计数【原根,矩阵树定理,拉格朗日插值】相关推荐
- [XSY]Tree Ext(矩阵树定理,拉格朗日插值,最小生成树,二分)
Tree Ext 这道题相当于把3道题合了起来. 要求修复的边中恰好有 k 条白边: 五颜六色的幻想乡(附拉格朗日插值法求多项式系数 ) + bzoj2654 tree(WQS二分 新科技get) 是 ...
- 五颜六色的幻想乡 - 矩阵树定理 - 拉格朗日插值
题目大意:给一张图,边有三种颜色,对于每一种可能的a+b+c=n-1的(a,b,c)问恰好a条红色边b条黄色c条蓝色边的方案数,n<=50,5s. 题解:朴素做法,红色视为x黄色视作y蓝色视作1 ...
- BZOJ1016 || 洛谷P4208 [JSOI2008]最小生成树计数【矩阵树定理】
时空限制 1000ms / 128MB 题目描述 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则 ...
- 【学习笔记】矩阵树定理(Matrix-Tree)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 一.矩阵树定理 二.常用定理 三.例题 1. Luogu P6178 [模板]Matrix-Tr ...
- 图论数学:矩阵树定理
运用矩阵树定理进行生成树计数 给定一个n个点m条边的无向图,问生成树有多少种可能 直接套用矩阵树定理计算即可 矩阵树定理的描述如下: 首先读入无向图的邻接矩阵,u-v G[u][v]++ G[v][u ...
- CSU 1805 Three Capitals(矩阵树定理+Best定理)
http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1805 题意: A和B之间有a条边,A和G之间有b条边,B和G之间有c条边.现在从A点出发走遍所 ...
- 基尔霍夫(kirchhoff)矩阵树定理
引入问题 给n个点m条边的图,求该图的最小生成树个数. 定理内容 我们对这个图构造两个矩阵,分别是这个图的连通矩阵和度数矩阵.连通矩阵S1S1S1的第iii行第jjj列上的数字表示原无向图中编 ...
- [P4455][CQOI2018]社交网络(矩阵树定理)
关于矩阵树定理用于有向图生成树计数: ①内向树生成树计数. A为邻接矩阵, D为出度矩阵. C=D−A. 以root为根的内向生成树个数为C的余子式M[root,root]的行列式. ②外向树 ...
- 行列式入门与矩阵树定理完整证明
文章目录 前置技能 行列式 定义 性质 拉普拉斯展开 线性性 可乘性 可加性 不重性 可倍加性 转置不变性 可交换性 行可交换性 列可交换性 优化行列式的计算 矩阵树定理 前置定义 一些引理 转置引理 ...
最新文章
- MySQL服务器的构建与维护
- 敏感词库 php,敏感词过滤的php类库
- 设计模式-创建型-单件
- [BZOJ1643][Usaco2007 Oct]Bessie's Secret Pasture 贝茜的秘密草坪
- echarts画中国地图!
- JS版日期格式化和解析工具类
- G - 取石子游戏 HDU - 2516 (斐波那契博弈)
- JavaWeb项目分层结构
- [Unity算法]斜抛运动
- 人均劳动生产率的计算方法_劳动生产率计算公式
- 【帝国CMS】灵动标签SQL调用广告系统里的广告
- 如何在windows11系统中打开ie11浏览网页
- 计算机网络dna,DNA计算
- php word 开发指南大全 点击目录查看所有功能
- 用BitBlt实现透明贴图
- [ROC-RK3568-PC] 手把手教你把出厂的Android系统烧写为Ubuntu系统
- seo + sem 的竞价推广 如何操作基础一(网络营销)
- 独热编码-通过python代码讲解
- 【洛谷 P1240】诸侯安置
- 大数据离线流程(小练习二)
热门文章
- 获取 子文件夹 后缀_CSDN学院第一个Ptython Homework-- 递归统计文件夹大小
- java中有stdin_在java中听stdin的后台进程
- 让对话框不显示边框_微信消息“无边框”模式搭配这款壁纸,简直绝了
- 移动计算机怎么开机密码,win7忘记开机密码解决办法
- html li 做瀑布流,js实现瀑布流效果(自动生成新的内容)
- 查询程序崩溃日志_PC 崩溃报告途径 amp; 临时解决方法
- oracle拆分分区语法详解大全_Oracle hash的分区方法详解
- php里面电话验证码,PHP的中问验证码
- 机器学习案例——生态系统蒸散速率预测
- csdn上修改字体的颜色