[loj3304]作业题


1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 35
4 #define D 152501
5 #define mod 998244353
6 #define mp make_pair
7 #define pii pair<int,int>
8 #define fi first
9 #define se second
10 struct ji{
11 int nex,to,len;
12 }edge[N*N];
13 int E,n,m,x,y,z,ans,head[N],p[D+10],phi[D+10];
14 pii d[N][N];
15 int ksm(int n,int m){
16 if (!m)return 1;
17 int s=ksm(n,m>>1);
18 s=1LL*s*s%mod;
19 if (m&1)s=1LL*s*n%mod;
20 return s;
21 }
22 pii add(pii x,pii y){
23 return mp((x.fi+y.fi)%mod,(x.se+y.se)%mod);
24 }
25 pii mul(pii x,pii y){
26 return mp(1LL*x.fi*y.fi%mod,(1LL*x.fi*y.se+1LL*x.se*y.fi)%mod);
27 }
28 pii inv(pii x){
29 if (!x.fi)return mp(ksm(x.se,mod-2),0);
30 int s=ksm(x.fi,mod-2);
31 return mp(s,mod-1LL*x.se*s%mod*s%mod);
32 }
33 void add(int x,int y,int z){
34 edge[E].nex=head[x];
35 edge[E].to=y;
36 edge[E].len=z;
37 head[x]=E++;
38 }
39 int find1(int k){
40 for(int i=k;i<n;i++)
41 if (d[i][k].fi)return i;
42 return 0;
43 }
44 int find2(int k){
45 for(int i=k;i<n;i++)
46 if (d[i][k].se)return i;
47 return 0;
48 }
49 int main(){
50 phi[1]=1;
51 for(int i=2;i<=D;i++){
52 if (!phi[i]){
53 p[++p[0]]=i;
54 phi[i]=i-1;
55 }
56 for(int j=1;(j<=p[0])&&(i*p[j]<=D);j++){
57 if (i%p[j])phi[i*p[j]]=phi[i]*phi[p[j]];
58 else{
59 phi[i*p[j]]=phi[i]*p[j];
60 break;
61 }
62 }
63 }
64 scanf("%d%d",&n,&m);
65 memset(head,-1,sizeof(head));
66 for(int i=1;i<=m;i++){
67 scanf("%d%d%d",&x,&y,&z);
68 add(x,y,z);
69 add(y,x,z);
70 }
71 for(int i=1;i<=D;i++){
72 x=0;
73 for(int j=0;j<E;j+=2)
74 if (edge[j].len%i==0)x++;
75 if (x<n-1)continue;
76 memset(d,0,sizeof(d));
77 for(int j=1;j<n;j++)
78 for(int k=head[j];k!=-1;k=edge[k].nex)
79 if (edge[k].len%i==0){
80 d[j][j]=add(d[j][j],mp(1,edge[k].len));
81 if (edge[k].to<n)d[j][edge[k].to]=mp(mod-1,mod-edge[k].len);
82 }
83 pii s=mp(1,0);
84 for(int j=1;j<n;j++){
85 x=find1(j);
86 if (!x)y=find2(j);
87 if (!x){
88 s.se=0;
89 break;
90 }
91 if (x!=j){
92 s=mp(mod-s.fi,mod-s.se);
93 for(int k=j;k<n;k++)swap(d[j][k],d[x][k]);
94 }
95 s=mul(s,d[j][j]);
96 pii t=inv(d[j][j]);
97 for(int k=j;k<n;k++)d[j][k]=mul(d[j][k],t);
98 for(int k=j+1;k<n;k++){
99 t=mp(mod-d[k][j].fi,mod-d[k][j].se);
100 for(int l=j;l<n;l++)d[k][l]=add(d[k][l],mul(t,d[j][l]));
101 }
102 }
103 ans=(ans+1LL*s.se*phi[i])%mod;
104 }
105 printf("%d",ans);
106 }
[loj3304]作业题的更多相关文章
- nyoj201 作业题
作业题 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 3 描述 小白同学这学期有一门课程叫做<数值计算方法>,这是一门有效使用数字计算机求数学问题近似解的方 ...
- NYOJ201作业题
作业题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 小白同学这学期有一门课程叫做<数值计算方法>,这是一门有效使用数字计算机求数学问题近似解的方法与过程, ...
- [ python ] 字符串的操作及作业题
字符串的操作方法 capitalize() : 首字母大写 s1 = 'my heart will go on' print(s1.capitalize()) # 首字母大写 # 执行结果: # My ...
- nyoj 作业题 dp
作业题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 小白同学这学期有一门课程叫做<数值计算方法>,这是一门有效使用数字计算机求数学问题近似解的方法与过程, ...
- NYOJ 201 作业题
作业题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 小白同学这学期有一门课程叫做<数值计算方法>,这是一门有效使用数字计算机求数学问题近似解的方法与过 ...
- 作业题:闰年 if((year%4==0&&year%100!=0)||year&400==0)
作业题:闰年 if((year%4==0&&year%100!=0)||year&400==0)
- python27期day14:有参装饰器、多个装饰器装饰一个函数、递归、作业题
1.有参装饰器:给装饰器添加一个参数.来控制装饰器的行为. @auth(参数) auth里层的函数名 = auth(参数) 被装饰的函数名 = auth里层的函数名(被装饰的函数名) 被装饰的函数名( ...
- python27期day13:闭包、装饰器初始、标准版装饰器、作业题
1.闭包: 保护数据安全.保护数据干净性. 2.闭包的定义:在嵌套函数内.使用非全局变量(且不使用本层变量) 将嵌套函数返回 闭包的目的:要接受被装饰的函数和被装饰函数需要的参数3.闭包举例子: de ...
- python27期day12:推导式、内置函数、高阶函数、匿名函数、作业题
1.推导式:做一些有规律的数据结构 列表推导式: 普通循环模式: [加工后的变量 for 循环] 示例一:print([i for i in range(1,51)]) 结果:[1, 2, 3, 4, ...
随机推荐
- VS2013的主函数问题
报错如下: 打开属性里面,修改字符集即可
- Spatial Analyst Tools(Spatial Analyst 工具)
Spatial Analyst Tools 1.区域分析 # Process: 以表格显示分区几何统计 arcpy.gp.ZonalGeometryAsTable_sa("", & ...
- 这几种Java异常处理方法,你会吗?
摘要:我们在软件开发的过程中,任何语言的开发过程中都离不开异常处理. 本文分享自华为云社区<Java异常处理学习总结>,作者: zekelove . 我们在软件开发的过程中,任何语言的开发 ...
- 虚拟机Parallels Desktop 17 (PD17)支持M1 自己动手制作启动器解锁
个人博客:xzajyjs.cn 如果自己有能力的话,直接查看这个视频即可.点此 前段时间刚出pd17,作为mac上最最强(没有之一)的虚拟机,版本17更是更进一步,性能提升极大,更是支持了Monter ...
- 【Java虚拟机10】ClassLoader.getSystemClassLoader()流程简析
前言 学习类加载必然离开不了sun.misc.Launcher这个类和Class.forName()这个方法. 分析ClassLoader.getSystemClassLoader()这个流程可以明白 ...
- Linux信号处理编程
01. 学习目标 了解信号中的基本概念 熟练使用信号相关的函数 了解内核中的阻塞信号集和未决信号集作用 熟悉信号集操作相关函数 熟练使用信号捕捉函数signal 熟练使用信号捕捉函数sigaction ...
- 【二食堂】Alpha- 发布声明
MarkTexting Alpha版本发布声明 今日我们的MarkTexting正式上线了! 功能介绍 我们实现了一个简单的文本标注生成知识图谱的网站,在Alpha阶段,我们实现的功能有: 登陆注册 ...
- NKOJ1828 Feed Ratios饲料调配
题目 好题!高斯消元切了! (其实只是单纯地想吐槽这道出现在"高斯消元"专练里的题,暴搜能过,goudoubuxie"Gauss") 下面是暴搜: #pragm ...
- Java:final,finally 和 finalize 的区别
在Java中,final,final和finalize之间有许多差异.final,final和finalize之间的差异列表如下: No final finally finalize 1 final用 ...
- 并发编程从零开始(十二)-Lock与Condition
并发编程从零开始(十二)-Lock与Condition 8 Lock与Condition 8.1 互斥锁 8.1.1 锁的可重入性 "可重入锁"是指当一个线程调用 object.l ...