Submission #35150044
Source Code Expand
#include <bits/stdc++.h>
#include <atcoder/modint>
using mint = atcoder::modint998244353;
using namespace std;
#define rep(i,a,n) for (int i=a;i<(int)n;i++)
int read(){int r;scanf("%d",&r);return r;}
const int N = 1e5;
int a[N+10];
vector<int> G[N+10]; // G[u] = {v}
vector<int> ys2i[N+10]; // ys2i[因数] = {点id}
bool vis[N+10];
int siz[N+10]; // 当前子树大小
int dfs1(int u,int fa,int d) { // return 子树大小
vis[u] = true;
siz[u] = 1;
for(auto v:G[u]) if(v!=fa && a[v]%d==0) siz[u] += dfs1(v,u,d);
return siz[u];
}
mint dfs2(int u, int fa, int sz/*联通块总大小*/, int d){
vis[u] = false;
mint r = 0;
mint pre = sz - siz[u] + 1; // 父方向 节点数 包括u; 树上换根 + 前缀和dp
r += pre;
for(auto v : G[u]) if(v!=fa && a[v]%d==0){
r += pre * siz[v]; // 当前v级子树的点和 前面点覆盖了u的路径数
pre += siz[v];
r += dfs2(v, u, sz, d);
}
return r;
}
int phi[N+10]; // phi(i)
int main() {
{ // calc phi
iota(phi,phi+N+1,0);
vector<bool> p(N+1,0); // prime vis
rep(i,2,N+1) if(!p[i]) for(int j=i;j<=N;j+=i){ // j = ki
p[j] = true;
(phi[j] /= i) *= (i-1);
}
}
int n = read();
{
vector<vector<int>>ys(N+1); // ys[i] = {i的因数}
rep(i,1,N+1) for(int j=i;j<=N;j+=i) ys[j].push_back(i); // 计算因子
rep(i,0,n) {
a[i] = read(); // 0-index
for(auto x:ys[a[i]]) ys2i[x].push_back(i);
}
rep(i,1,n){
int u = read()-1;
int v = read()-1;
G[u].push_back(v);
G[v].push_back(u);
}
}
mint ans = 0;
rep(d,1,N+1){ // \phi(d) * 路径上全是d的倍数的路径长度和 = \phi(d) * sum(每个点被边覆盖的次数)
mint r = 0;
for(auto u:ys2i[d]) if(!vis[u]) dfs1(u,u,d);
for(auto u:ys2i[d]) if(vis[u]) r += dfs2(u,u,siz[u],d);
ans += phi[d] * r;
}
rep(i,0,n) ans -= a[i]; // 去掉单点
printf("%d\n", ans.val());
return 0;
}
Submission Info
Submission Time
2022-09-25 10:33:46+0900
Task
G - GCD cost on the tree
User
cromarmot
Language
C++ (GCC 9.2.1)
Score
600
Code Size
1930 Byte
Status
AC
Exec Time
1989 ms
Memory
77864 KiB
Compile Error
./Main.cpp: In function ‘int read()’:
./Main.cpp:6:23: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
6 | int read(){int r;scanf("%d",&r);return r;}
| ~~~~~^~~~~~~~~
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
600 / 600
Status
Set Name
Test Cases
Sample
example_00.txt, example_01.txt
All
example_00.txt, example_01.txt, hand_00.txt, hand_01.txt, hand_02.txt, hand_03.txt, hand_04.txt, hand_05.txt, hand_06.txt, hand_07.txt, hand_08.txt, hand_09.txt, hand_10.txt, hand_11.txt, hand_12.txt, hand_13.txt, hand_14.txt, hand_15.txt, random_00.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt
Case Name
Status
Exec Time
Memory
example_00.txt
AC
56 ms
18860 KiB
example_01.txt
AC
60 ms
18788 KiB
hand_00.txt
AC
764 ms
73928 KiB
hand_01.txt
AC
402 ms
57680 KiB
hand_02.txt
AC
685 ms
66972 KiB
hand_03.txt
AC
255 ms
30080 KiB
hand_04.txt
AC
249 ms
29496 KiB
hand_05.txt
AC
1989 ms
76808 KiB
hand_06.txt
AC
1512 ms
70552 KiB
hand_07.txt
AC
1036 ms
69996 KiB
hand_08.txt
AC
1039 ms
69732 KiB
hand_09.txt
AC
200 ms
32976 KiB
hand_10.txt
AC
603 ms
40844 KiB
hand_11.txt
AC
1601 ms
69612 KiB
hand_12.txt
AC
1008 ms
67624 KiB
hand_13.txt
AC
601 ms
41792 KiB
hand_14.txt
AC
50 ms
18748 KiB
hand_15.txt
AC
50 ms
18760 KiB
random_00.txt
AC
1048 ms
70636 KiB
random_01.txt
AC
212 ms
33240 KiB
random_02.txt
AC
1837 ms
75964 KiB
random_03.txt
AC
1896 ms
77864 KiB
random_04.txt
AC
1749 ms
72264 KiB
random_05.txt
AC
1817 ms
73292 KiB
random_06.txt
AC
1766 ms
74496 KiB
random_07.txt
AC
707 ms
66864 KiB
random_08.txt
AC
180 ms
29996 KiB
random_09.txt
AC
830 ms
73996 KiB
random_10.txt
AC
587 ms
73796 KiB
random_11.txt
AC
790 ms
70868 KiB
random_12.txt
AC
557 ms
70144 KiB
random_13.txt
AC
804 ms
70684 KiB
random_14.txt
AC
1018 ms
65824 KiB
random_15.txt
AC
220 ms
29460 KiB
random_16.txt
AC
1413 ms
72968 KiB
random_17.txt
AC
1380 ms
73468 KiB
random_18.txt
AC
1345 ms
69880 KiB
random_19.txt
AC
1304 ms
70096 KiB
random_20.txt
AC
1340 ms
70124 KiB