【省选2020A卷】作业题【矩阵树】【扩域】【莫比乌斯反演】

传送门

为什么世界上会有这么傻的题啊……我佛了

很显然就是矩阵树强行缝合莫反

f(n)f(n)f(n)表示所有边权gcd⁡\gcdgcdnnn的生成树权值和,g(d)g(d)g(d)表示所有边权都是 ddd的倍数的生成树权值和

g(d)=∑d∣nf(n)g(d)=\sum_{d\mid n}f(n)g(d)=dnf(n)

f(d)=∑d∣ng(n)μ(nd)f(d)=\sum_{d\mid n}g(n)\mu(\frac nd)f(d)=dng(n)μ(dn)

做完了

开权值大小个vector,把每条边压到边权的约数的vector中

如果一个vector中边数小于n−1n-1n1就跳过,否则对每条边构造(wx+1)(wx+1)(wx+1)算矩阵树得到ggg,然后无脑算出fff统计答案就好了

显然矩阵树次数不会超过O(md(V)n)=O(nd(V))O(\frac {md(V)}n)=O(nd(V))O(nmd(V))=O(nd(V)),总复杂度O(n4d(v))O(n^4d(v))O(n4d(v))

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <vector>
using namespace std;
struct edge{int u,v,w;};
typedef long long ll;
const int MOD=998244353,N=152501;
inline int qpow(int a,int p)
{int ans=1;while (p){if (p&1) ans=(ll)ans*a%MOD;a=(ll)a*a%MOD;p>>=1;}return ans;
}
#define inv(x) qpow(x,MOD-2)
int np[N+5],pl[N+5],mu[N+5],cnt;
inline void init()
{np[1]=mu[1]=1;for (int i=2;i<=N;i++){if (!np[i]) mu[pl[++cnt]=i]=-1;for (int j=1,x;(x=i*pl[j])<=N;j++){np[x]=1;if (i%pl[j]==0) break;mu[x]=(MOD-mu[i])%MOD;}}
}
inline int add(const int& x,const int& y){return x+y>=MOD? x+y-MOD:x+y;}
inline int dec(const int& x,const int& y){return x<y? x-y+MOD:x-y;}
struct poly{int x,y;poly(const int& x=0,const int& y=0):x(x),y(y){}};
inline poly operator +(const poly& a,const poly& b){return poly(add(a.x,b.x),add(a.y,b.y));}
inline poly operator -(const poly& a,const poly& b){return poly(dec(a.x,b.x),dec(a.y,b.y));}
inline poly operator *(const poly& a,const poly& b){return poly(((ll)a.x*b.y+(ll)a.y*b.x)%MOD,(ll)a.y*b.y%MOD);}
inline poly operator /(const poly& a,const poly& b){ll t=inv(b.y);return poly(dec((ll)a.x*b.y%MOD,(ll)a.y*b.x%MOD)*t%MOD*t%MOD,a.y*t%MOD);}
int n,mx;
poly g[35][35];
inline int det()
{poly ans(0,1);for (int i=1;i<n;i++){ans=ans*g[i][i];for (int j=i+1;j<n;j++){poly t=g[j][i]/g[i][i];for (int k=i;k<n;k++)g[j][k]=g[j][k]-g[i][k]*t;}		}return ans.x;
}
vector<edge> lis[N+5];
int F[N+5],G[N+5];
int main()
{init();int m;scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){edge e;scanf("%d%d%d",&e.u,&e.v,&e.w);mx=max(mx,e.w);for (int i=1;i*i<=e.w;i++)if (e.w%i==0){lis[i].push_back(e);if (i*i<e.w) lis[e.w/i].push_back(e);}}for (int k=1;k<=mx;k++){if ((int)lis[k].size()<n-1) continue;for (int i=1;i<=n;i++)for (int j=1;j<=n;j++)g[i][j]=poly(0,0);for (vector<edge>::iterator it=lis[k].begin();it!=lis[k].end();++it){poly t(it->w,1);int u=it->u,v=it->v;g[u][u]=g[u][u]+t,g[v][v]=g[v][v]+t;g[u][v]=g[u][v]-t,g[v][u]=g[v][u]-t;	}	G[k]=det();}for (int d=1;d<=mx;d++)for (int i=1;i*d<=mx;i++)F[d]=(F[d]+(ll)G[i*d]*mu[i])%MOD;int ans=0;for (int i=1;i<=mx;i++) ans=(ans+(ll)i*F[i])%MOD;printf("%d\n",ans);return 0;
}

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

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

相关文章

Libre OJ 「BalticOI 2013」非回文数 数位dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 问[l,r][l,r][l,r]内有多少个数是非回文数&#xff0c;即数字中不存在连续几个数为回文数。 l,r≤1e18l,r\le1e18l,r≤1e18 思路&#xff1a; 这么大的范围很明显数位dpdpdp了&#xff0c;容易知道当一个数…

《ASP.NET Core 微服务实战》译者序

最近&#xff0c;我将《ASP.NET Core 微服务实战》一书由英文翻译为中文。这本书是由清华大学出版社引进的&#xff0c;目前还处于最后的排版校对过程中&#xff0c;现将该书的译者序发表于此。以下为译者译全文&#xff1a;“微服务”的概念在 2014 年正式提出之后&#xff0c…

【杭电多校2020】Distinct Sub-palindromes【结论】【构造】

题意&#xff1a;长度为nnn的 本质不同的回文子串个数最少 的小写字母组成的字符串 的个数。 n≤109n\leq 10^9n≤109 回文子串个数至少为不同字母的数量 显然 最少回文子串个数为min⁡(n,3)\min(n,3)min(n,3) n≤2n\leq2n≤2显然 n≥3n\geq3n≥3时 构造abcabcabc...\textt…

.NET 云原生技术使用调查

.NET Core 3.0 即将发布RC&#xff0c;.NET Core 3.0默认更好的支持Docker资源限制&#xff0c;官方团队也在努力让.NET Core成为真正的容器运行时&#xff0c;使其在低内存环境中具有容器感知功能并高效运行。GC堆限制.NET Core减少了CoreCLR默认使用的内存&#xff0c;如G0代…

【杭电多校2020】Minimum Index【Lyndon Word】

题意&#xff1a;给定字符串&#xff0c;求所有前缀的最小后缀。 n≤2107n\leq 2\times10^7n≤2107 最小后缀就是Lyndon分解的最后一段。而Duval本质上是可以重复修改的增量算法&#xff0c;所以是可以做的。 记ansians_iansi​为前缀iii的最小后缀。设维护未确定的循环节的指…

FZU - 2042 The Mad Mathematician 数位dp + 算贡献

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 求sumsumsum。 a,b,c,d,e≤1e18a,b,c,d,e\le1e18a,b,c,d,e≤1e18 思路&#xff1a; 这是一篇无从考究的题解&#xff0c;因为fzu现在进不去。 看到这种题直接考虑数位dpdpdp&#xff0c;对于[A,B],[C,D][…

「PowerBI」分析服务多维数据结构重回关系数据库的一大绝招

在过往Excel催化剂定位的轻量级ExcelPowerBIDesktop的解决方案中&#xff0c;已经做过了近乎完美的PowerBIDesktop数据模型数据导出到Excel工作表的应用&#xff0c;这也是个人版数据应用的重要的刚需功能&#xff0c;由Excel催化剂免费奉献给PowerBI社区作完结。此篇再次带领大…

【杭电多校2020】Fibonacci Sum【斐波拉契通项】【推式子】

题意&#xff1a;设FiF_iFi​为斐波拉契数列&#xff0c;求 ∑i0N(FiC)k\sum_{i0}^N(F_{iC})^ki0∑N​(FiC​)k 模109910^991099 N,C≤1018,k≤105N,C\leq10^{18},k\leq10^5N,C≤1018,k≤105 把斐波拉契暴力拆开 FiC15[(152)iC−(1−52)iC]F_{iC}\frac 1 {\sqrt{5}}[(\frac {…

Codeforces Round #257 (Div. 1) D. Jzzhu and Numbers 高维前缀和 + 容斥

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 完全想不到容斥啊&#xff0c;看了半天也没看懂渍渍渍。 定义f[i]f[i]f[i]表示iii的超集个数&#xff0c;那么选择的方案就是2f[i]−12^{f[i]}-12f[i]−1了&#xff0c;因为不能一个不选所…

花5分钟时间来了解一下高性能网关Kong会有意外收获

前言前几天开源发布了 Kong.Net 项目&#xff0c;收到了大量园友的反馈&#xff0c;开源当天就突破了 100 个star &#xff0c;可喜可贺&#xff0c;但是从侧面也说明&#xff0c;我们 .NetCore 阵营真的非常需要拥抱开源&#xff0c;应该敞开心扉&#xff0c;集众家之长&#…

【杭电多校2020】Total Eclipse【贪心】【并查集】

题意&#xff1a;nnn个点mmm条边的无向图&#xff0c;每个点有一个正点权&#xff0c;每次选择一个连通子图&#xff0c;将里面的权值都减111。求所有点权为000的最小步数。 T≤10,n≤105,m≤2105T\leq 10,n\leq 10^5,m\leq2\times10^5T≤10,n≤105,m≤2105 考虑一个贪心&…

Codeforces Round #725 (Div. 3) G. Gift Set 二分

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 有两种物品分别有x,yx,yx,y个&#xff0c;每次可以从一个拿出aaa个&#xff0c;另一个拿出bbb个分成一组&#xff0c;问最多能分成多少组。 思路&#xff1a; 这个题有一个显然的单调性&#xff0c;所以二…

长沙.NET技术社区·设计到实现

方案最终夭折回到一年前的四月初&#xff0c;也是这样一个气象更新&#xff0c;春意盎然的一年中最好的时光。 在长沙.NET技术圈中&#xff0c;有一个不知名的QQ群&#xff0c;叫做放肆.NET技术交流群&#xff08;群号&#xff1a;44329330&#xff09;&#xff0c;在这个群里面…

【杭电多校2020】Lead of Wisdom【搜索】【复杂度证明】

题意&#xff1a;nnn件物品&#xff0c;每种物品有一个种类tit_iti​&#xff0c;四个属性ai,bi,ci,dia_i,b_i,c_i,d_iai​,bi​,ci​,di​&#xff0c;每个种类最多选一件物品&#xff0c;求 (100∑ai)(100∑bi)(100∑ci)(100∑di)(100\sum a_i)(100\sum b_i)(100\sum c_i)(10…

Loj #6274. 数字 数位dp + 去重

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 考虑数位dpdpdp&#xff0c;设计状态f[pos][flag1][flag2][flag3][flag4]f[pos][flag1][flag2][flag3][flag4]f[pos][flag1][flag2][flag3][flag4]&#xff0c;其中flag1:x≥Lxflag2:y≤Rx…

微软发布 VS Code 容器化开发工具,大大简化物联网设备开发

近日&#xff08;北京时间 2019 年 7 月 9 日&#xff09;&#xff0c;微软宣布了 Azure IoT Tools for VS Code 的全新功能&#xff1a;通过在容器中封装编译器、设备 SDK 以及基本库&#xff0c;大大简化了设备交叉编译的工作量&#xff0c;使得嵌入式 Linux 设备&#xff08…

【杭电多校2020】Go Running【几何】【最小点覆盖】

题意&#xff1a;有一个数轴&#xff0c;若干人在某个时刻开始从某个点朝某个方向按111的速度走若干时间。已知nnn个条件&#xff0c;形如tit_iti​时刻xix_ixi​的位置有人&#xff0c;求最少可能的人数。 ∑n≤5105\sum n\leq 5\times 10^5∑n≤5105 画出 x−tx-tx−t二维平…

Codeforces Round #636 (Div. 3) F. Restore the Permutation by Sorted Segments 思维 + 暴力

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n≤200n\le200n≤200 思路&#xff1a; 首先关注到rrr从[2,n][2,n][2,n]都出现一次&#xff0c;所以很明显最后一个位置只出现一次&#xff0c;但是这样倒着来不是很好做考虑正着来。 我们可以枚举111位置填…

.NET中生成动态验证码

NET中生成动态验证码验证码是图片上写上几个字&#xff0c;然后对这几个字做特殊处理&#xff0c;如扭曲、旋转、修改文字位置&#xff0c;然后加入一些线条&#xff0c;或加入一些特殊效果&#xff0c;使这些在人类能正常识别的同时&#xff0c;机器却很难识别出来&#xff0c…

【NOI2019】弹跳【二维线段树】【dijkstra】

题意&#xff1a;一个whw\times hwh的二维平面上有nnn个城市&#xff0c;有mmm个弹跳装置&#xff0c;第iii个可以花费tit_iti​的时间从城市pip_ipi​跳到矩形x∈[l,r],y∈[u,d]x\in [l,r],y\in[u,d]x∈[l,r],y∈[u,d]中的任意一个城市。求从111到其他每个城市的最小时间。 w,…