Solution -「多校联训」种蘑菇
\(\mathcal{Description}\)
Link.
给定一棵含有 \(n\) 个结点的树,设 \(S\) 为其中的非空联通子集,求
\]
\(n\le2\times10^5\)。
\(\mathcal{Solution}\)
直接莫反(为什么当时我迟疑那么久 qwq):
\]
前两层直接枚举,最后一个简单树上 DP,复杂度是
\]
记得提醒我看见 \(\gcd\) 不要忘了莫反这家伙。(
\(\mathcal{Code}\)
/* Clearink */
#include <cstdio>
#define rep( i, l, r ) for ( int i = l, rep##i = r; i <= rep##i; ++i )
#define per( i, r, l ) for ( int i = r, per##i = l; i >= per##i; --i )
inline int rint() {
int x = 0, f = 1, s = getchar();
for ( ; s < '0' || '9' < s; s = getchar() ) f = s == '-' ? -f : f;
for ( ; '0' <= s && s <= '9'; s = getchar() ) x = x * 10 + ( s ^ '0' );
return x * f;
}
template<typename Tp>
inline void wint( Tp x ) {
if ( x < 0 ) putchar( '-' ), x = -x;
if ( 9 < x ) wint( x / 10 );
putchar( x % 10 ^ '0' );
}
const int MAXN = 2e5, MOD = 1e9 + 7;
int n, ecnt, head[MAXN + 5];
struct Edge { int to, nxt; } graph[MAXN * 2 + 5];
inline int mul( const long long a, const int b ) { return a * b % MOD; }
inline int sub( int a, const int b ) { return ( a -= b ) < 0 ? a + MOD : a; }
inline void subeq( int& a, const int b ) { ( a -= b ) < 0 && ( a += MOD ); }
inline int add( int a, const int b ) { return ( a += b ) < MOD ? a : a - MOD; }
inline void addeq( int& a, const int b ) { ( a += b ) >= MOD && ( a -= MOD ); }
inline void link( const int u, const int v ) {
graph[++ecnt] = { v, head[u] }, head[u] = ecnt;
graph[++ecnt] = { u, head[v] }, head[v] = ecnt;
}
int pn, mu[MAXN + 5], pr[MAXN + 5];
bool npr[MAXN + 5];
inline void sieve( const int n ) {
mu[1] = 1;
rep ( i, 2, n ) {
if ( !npr[i] ) mu[pr[++pn] = i] = -1;
for ( int j = 1, t; j <= pn && ( t = i * pr[j] ) <= n; ++j ) {
npr[t] = true;
if ( !( i % pr[j] ) ) break;
mu[t] = -mu[i];
}
}
}
bool vis[MAXN + 5];
int f[MAXN + 5];
inline void dfs( const int u, const int bas, const int fac ) {
vis[u] = true, f[u] = bas;
for ( int i = head[u], v; i; i = graph[i].nxt ) {
if ( !vis[v = graph[i].to] && !( v % fac ) ) {
dfs( v, bas, fac ), addeq( f[u], mul( f[u], f[v] ) );
}
}
}
inline int solve( const int bas, const int fac ) {
for ( int i = fac; i <= n; i += fac ) if ( !vis[i] ) dfs( i, bas, fac );
int ret = 0;
for ( int i = fac; i <= n; i += fac ) addeq( ret, f[i] ), vis[i] = false;
return ret;
}
int main() {
freopen( "mushroom.in", "r", stdin );
freopen( "mushroom.out", "w", stdout );
n = rint();
rep ( i, 2, n ) link( rint(), rint() );
sieve( n );
int ans = 0;
rep ( i, 1, n ) rep ( j, 1, n / i ) {
addeq( ans, ( solve( i, i * j ) * mu[j] + MOD ) % MOD );
}
wint( ans ), putchar( '\n' );
return 0;
}
Solution -「多校联训」种蘑菇的更多相关文章
- Solution -「多校联训」I Love Random
\(\mathcal{Description}\) 给定排列 \(\{p_n\}\),可以在其上进行若干次操作,每次选取 \([l,r]\),把其中所有元素变为原区间最小值,求能够得到的所有不同序 ...
- Solution -「多校联训」朝鲜时蔬
\(\mathcal{Description}\) Link. 破案了,朝鲜时蔬 = 超现实树!(指写得像那什么一样的题面. 对于整数集 \(X\),定义其 好子集 为满足 \(Y\sub ...
- Solution -「多校联训」假人
\(\mathcal{Description}\) Link. 一种物品有 长度 和 权值 两种属性,现给定 \(n\) 组物品,第 \(i\) 组有 \(k_i\) 个,分别为 \((1,a ...
- Solution -「多校联训」古老的序列问题
\(\mathcal{Description}\) Link. 给定序列 \(\{a_n\}\),和 \(q\) 次形如 \([L,R]\) 的询问,每次回答 \[\sum_{[l,r]\su ...
- Solution -「多校联训」自动机
\(\mathcal{Description}\) Link. 有一个状态集为 \(V\) 的自动机,状态接收 (, ) 和 _(空格) 三种字符,分别编号为 \(0,1,2\),状态 \(u ...
- Solution -「多校联训」取石子游戏
\(\mathcal{Description}\) Link. 有 \(n\) 堆石子,第 \(i\) 堆有 \(x_i\) 个,Alice 每次只能从这堆中拿走 \(a_i\) 个石子,Bo ...
- Solution -「多校联训」行列式
\(\mathcal{Description}\) Link. 给定 \(x,\{d_i\}_{i=1}^n,\{p_i\}_{i=2}^n,\{b_i\}_{i=2}^n,\{c_i\}_{ ...
- Solution -「多校联训」最小点覆盖
\(\mathcal{Description}\) Link. 求含有 \(n\) 个结点的所有有标号简单无向图中,最小点覆盖为 \(m\) 的图的数量的奇偶性.\(T\) 组数据. \( ...
- Solution -「多校联训」小卖部
\(\mathcal{Description}\) Link. 有 \(n\) 种物品,第 \(i\) 中有 \(a_i\) 个,单价为 \(b_i\).共 \(q\) 次询问,每次查询用不超 ...
随机推荐
- map类型转string必须用.toString
- Calendar日期往后一天,一月等
import java.util.Date ; Date date=new Date();//取时间 System.out.println(date.toString()); ...
- python驱动SAP完成数据导出(二)
在上一篇 python驱动SAP完成数据导出(一)中,我们提到了数据导出前,SAP布局的重要性,如何识别当前布局模式,以及如何切换到想要的布局.本篇小爬将着重讲讲数据导出的注意事项. 我们可以通过如下 ...
- 小程序onShareAppMessage有点迷
小程序遇到的问题 起因 目前项目需求是分享时携带参数去进行裂变,但是在查看微信文档后发现有onShareAppMessage这个页面处理事件可以使用.事件可以使用return一个Object,用于自定 ...
- WSL与gnome-desktop
WSL与gome-desktop 经过测试和检索 确定WSL1无法在gome-desktop实现GUI桌面 只能实现其中应用的现实,比如打开记事本在Xserver https://www.reddit ...
- unity3d发布安卓出错plese set the package name
发布时报错 参考https://forum.unity.com/threads/where-is-package-name-setting.318839/ 参考https://answers.unit ...
- LaTex用法笔记(一)——LaTex源文件的基本结构
首先打开TeXstudio,创建一个新文件并保存 用\documentclass{article}引入一个文档类,也可以引用book/report/letter 然后用\begin{}和\end{}输 ...
- eclipse不能创建web项目,如何设置(亲测可用)
具体描述:就是在项目右键或者file-->new的时候没有dynamic web project选项)(我这里已经解决.所以看得到) 根本原因:就是有没有web的开发插件 两种办法 1.下载使用 ...
- 响应的HTTP协议介绍及常见响应码说明
响应的HTTP协议介绍 1,响应行 1)响应的协议和版本号 HTTP/1.1 2)响应状态码 200 3)响应状态描述符 ok 2,响应头 1)key:value 不同的响应头,有其不同含义 空行 3 ...
- String类-intern方法
1 package cn.itcast.p1.string.demo; 2 3 class StringObjectDemo { 4 public static void main(String[] ...