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 Pri1n,k100,1m104,p[2,109]Pri
数据保证k≡1(modp)k\equiv 1(mod\ p)k1(mod p)


解题思路

一个想法是把一条边权看做xwx^wxw的多项式,用矩阵树定理乘起来后kkk的倍数的系数和就是答案。
但是这样系数是nknknk个,显然搞不定。

类似于CF917D-StrangerTree的做法我们可以带入若干个值然后跑矩阵数之后求出若干个点值。

但是这里是kkk的倍数,我们要模拟卷积,可以带入kkkggg满足gk=1g^k=1gk=1的就可以了。

这里保证了k≡1(modp)k\equiv 1(mod\ p)k1(mod p),所以我们求出ppp的原根ggg然后带入gp−1k×i(i∈[0,k−1])g^{\frac{p-1}{k}\times i}(i\in[0,k-1])gkp1×i(i[0,k1])就可以了。

然后直接拉插求出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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数论】Crash的数字表格 / JZPTAB(P1829)

正题 P1829 题目大意 给出n,m&#xff0c;求∑i1n∑j1mlcm(i,j)\sum_{i1}^n\sum_{j1}^mlcm(i,j)i1∑n​j1∑m​lcm(i,j) 解题思路 ∑i1n∑j1mlcm(i,j)\sum_{i1}^n\sum_{j1}^mlcm(i,j)i1∑n​j1∑m​lcm(i,j) ∑d1nd∑i1n/d∑j1m/di∗j[gcd(i,j)1]\sum_{d1}^nd\sum_{i1}^{n/d}…

2018-2019 ACM-ICPC, Asia Seoul Regional Contest——A - Circuits

A - Circuits 不难发现x坐标根本没用&#xff0c;只需要存储y坐标。 题目所求的两条直线y1ay_1ay1​a&#xff0c;y2b(a<b)y_2b\ (a<b)y2​b (a<b) 我们枚举y2by_2by2​b这条线&#xff0c;这条线一定可以是矩形的边界&#xff0c;于是我们扫描矩形边界差分计算当前…

aspnet core 2.1中使用jwt从原理到精通一

原理jwt对所有语言都是通用的&#xff0c;只要知道秘钥&#xff0c;另一一种语言有可以对jwt的有效性进行判断;jwt的组成&#xff1b;Header部分Base64转化.Payload部分Base64转化.使用HS256方式根据秘钥对前面两部分进行加密后再Base64转化&#xff0c;其中使用的hs256加密是h…

2020牛客国庆集训派对day3 Points

Points 题目描述 Jack and Rose are playing games after working out so many difficult problems. They together drew a “Haizi” tree to show their collaboration. “Haizi” tree is the same as the tree defined in graph theory. Now Jack would like to count t…

CF1137F-Matches Are Not a Child‘s Play【LCT】

正题 题目链接:https://www.luogu.com.cn/problem/CF1137F 题目大意 给出nnn个点的一棵树&#xff0c;第iii个点权值为iii。 一棵树的删除序列定义为每次删除编号最小的叶子并将其加入序列末尾。 要求支持 修改一个点的权值为一个比目前所有权值都要大的一个值询问一个点在…

【数论】数表(P3312)

正题 P3312 题目大意 给出n,m,a&#xff0c;求∑i1n∑j1mσ(gcd(i,j))[σ(gcd(i,j))≤a]\sum_{i1}^n\sum_{j1}^m\sigma(gcd(i,j))[\sigma(gcd(i,j))\leq a]i1∑n​j1∑m​σ(gcd(i,j))[σ(gcd(i,j))≤a] 解题思路 先不考虑a的条件限制 ∑i1n∑j1mσ(gcd(i,j))\sum_{i1}^n\su…

codeforces1452 E. Two Editorials

E. Two Editorials 官方题解 首先将每个参赛者按照区间中点排序&#xff0c;那么前一段参赛者听第一个人&#xff0c;而后一段听第二个人的。 预处理数组su[j]表示j→mj\to mj→m这些参赛者能被“覆盖”最多“贡献” 只需要枚举第一个人演讲的区间&#xff0c;再考虑前多少参赛…

.NET Core微服务之路:利用DotNetty实现一个简单的通信过程

上一篇我们已经全面的介绍过《基于gRPC服务发现与服务治理的方案》&#xff0c;我们先复习一下RPC的调用过程&#xff08;笔者会在这一节的几篇文章中反复的强调这个过程调用方案&#xff09;&#xff0c;看下图根据上面图&#xff0c;服务化原理可以分为3步&#xff1a;服务端…

codeforces1451 C. String Equality

真的弱&#xff0c;这题都想蹦了。 这场md&#xff0c;b题看错题调了1小时才发现&#xff0c;c题上来也看错。。最后懒得写了睡觉~ C. String Equality 神的讲解 注意到连续k个相同字符才能使用操作二&#xff0c;不过我们可以交换&#xff0c;由此不难知道是否能够交换之和出…

YbtOJ#732-斐波那契【特征方程,LCT】

正题 题目链接:http://www.ybtoj.com.cn/contest/125/problem/2 题目大意 给出nnn个点的一棵树&#xff0c;以111为根&#xff0c;每个点有点权aia_iai​。要求支持mmm次操作 修改一个修改一个节点的父节点修改一条路径的权值为www给出uuu询问Fbi(au)Fbi(a_u)Fbi(au​)给出u…

2020牛客国庆集训派对day3 Leftbest

Leftbest 链接&#xff1a;https://ac.nowcoder.com/acm/contest/7830/A 来源&#xff1a;牛客网 题目描述 Jack is worried about being single for his whole life, so he begins to use a famous dating app. In this app, the user is shown single men/women’s photos …

【笛卡尔树】【树状数组】Beautiful Pair(P4755)

正题 P4755 题目大意 给你n个数&#xff0c;问你有多少对二元组 (i,j)(i,j)(i,j) 满足 i≤ji\leq ji≤j 且 aiaj≤maxiijaia_i\times a_j\leq max_{ii}^ja_iai​aj​≤maxiij​ai​ 解题思路 考虑对原数组构建笛卡尔树&#xff0c;树中左右子树之间的二元组所取得的max就是当…

[译]ASP.NET Core中使用MediatR实现命令和中介者模式

在本文中&#xff0c;我将解释命令模式&#xff0c;以及如何利用基于命令模式的第三方库来实现它们&#xff0c;以及如何在ASP.NET Core中使用它来解决我们的问题并使代码简洁。因此&#xff0c;我们将通过下面的主题来进行相关的讲解。什么是命令模式?命令模式的简单实例以及…

【贪心】数据备份(P6320)

正题 P6320 题目大意 有n个点&#xff0c;相邻的点不能同时选&#xff0c;问你选k个的最小代价 解题思路 考虑贪心取每个点&#xff0c;取了一个点后设置一个撤回点&#xff0c;就是把该点的选择取反&#xff0c;同时选择左右&#xff0c;这样直接用堆维护即可 code #inclu…

codeforces1451 D. Circle Game

D. Circle Game 看到博弈题&#xff0c;直接打表不过并不能发现什么规律gg 后手每次按照先手对称进行移动&#xff0c;如果先手向右则向上&#xff0c;先手向上则向右&#xff0c;然后考虑最后一步即可。 对称技巧&#xff01;&#xff01;&#xff01; #define IO ios::syn…

2020-10-03

Flowers 题目描述 Recently Jack becomes much more romantic. He would like to prepare several bunches of flowers. Each bunch of flowers must have exactly M flowers. As Jack does not want to be boring, he hopes that flowers in the same bunch are all differ…

P4770-[NOI2018]你的名字【SAM,线段树合并】

正题 题目链接:https://www.luogu.com.cn/problem/P4770 题目大意 给出一个长度为nnn的字符串SSS。qqq次询问给出一个串TTT和一个区间[L,R][L,R][L,R]&#xff0c;求TTT有多少个本质不同的子串不是SL∼RS_{L\sim R}SL∼R​的子串。 1≤n≤5105,1≤Q≤105,∑∣T∣≤1061\leq n…

.NET in Browser - Blazor

什么是BlazorBlazor 是一个实验性的. NET web 框架, 使用 C# 和 HTML 在任何浏览器中不需要插件即可运行 WebAssembly 程序集。什么是WebAssemblyWebAssembly是一种新的适合于编译到Web的&#xff0c;可移植的&#xff0c;大小和加载时间高效的格式&#xff0c;是一种新的字节码…

【数论】【杜教筛】选数(P3172)

正题 P3172 题目大意 在 [L,R] 选n个数&#xff0c;问gcdk的方案数 解题思路 因为gcdk&#xff0c;那么所选的数都是k的倍数&#xff0c;那么可以让L,R整除k&#xff0c;那么有 ∑a1LR∑a2LR...∑anLR[gcd(a1,a2...an)1]\sum_{a_1L}^R\sum_{a_2L}^R...\sum_{a_nL}^R[gcd(a_1…

【模板】吉老师线段树

ACM模板 目录区间取最值区间取最值 Gorgeous Sequence 区间最值操作往往采用以下办法 线段树维护&#xff1a; 区间最大值mx\text{mx}mx区间严格次大值smx\text {smx}smx区间和sum\text{sum}sum区间最大值个数cnt\text{cnt}cnt区间最值懒标记lazy\text{lazy}lazy 实现区间…