CF1554E You

news/2024/11/7 2:11:57/文章来源:https://www.cnblogs.com/gmh77/p/18524273

题面


题解

注意a[u]是点u位置的a,不是每选一个点然后把非标记个数丢进vector里(

每选择一个点,相当于把相邻的非标记的边标为外向,最后一个点u的外向边个数就是a[u]

又观察发现每种边定向方案都可以构造(拓扑),所以一共有2^(n-1)种方案

设f[k]表示gcd=k,g[k]表示k|gcd,求出g之后反演一下


显然g[1]=2^(n-1);对于g[k>1],发现叶子必定内向,然后去掉叶子后的下一层唯一确定父亲边方向,如此类推得到方案唯一,因此可以O(n)判断一个g[k]是否存在

找到任意一个叶子的父亲,记为sp,则a[sp]必为son[sp]或son[sp]+1,即k|son[sp]或k|(son[sp]+1),因此check之前先判一下,这样要O(n)check的k就只有根号(其实是σ(n))个了

总复杂度\(O(n\sqrt n)\)


不用反演的话,gcd=k就先用k|gcd来求(唯一),最后求gcd判一下,多一个log

code

#include <bits/stdc++.h>
#define fo(a,b,c) for (int a=b; a<=c; a++)
#define fd(a,b,c) for (int a=b; a>=c; a--)
#define add(a,b) a=((a)+(b))%mod
#define mod 998244353
#define ll long long
#define file
using namespace std;const int N=1e5+10;
int a[N*2][2],ls[N],len;
int p[N],miu[N],lenp;
bool bz[N];
vector<int> v;
int son[N],sum[N],fa[N],sp;
ll f[N],g[N];
int T,n;void init()
{int l=100000;miu[1]=1;fo(i,2,l){if (!bz[i])p[++lenp]=i,miu[i]=-1;fo(j,1,lenp)if (1ll*i*p[j]<=l){bz[i*p[j]]=1;miu[i*p[j]]=-miu[i];if (i%p[j]==0){miu[i*p[j]]=0;break;}}elsebreak;}
}
void New(int x,int y)
{++len;a[len][0]=y;a[len][1]=ls[x];ls[x]=len;
}ll qpower(ll a,int b)
{ll ans=1;while (b){if (b&1) ans=ans*a%mod;a=a*a%mod;b>>=1;}return ans;
}void dfs(int Fa,int t)
{int i;fa[t]=Fa;for (i=ls[t]; i; i=a[i][1])if (a[i][0]!=Fa){++son[t];dfs(t,a[i][0]);}v.push_back(t);if (sp==0 && son[t]) sp=t;
}int check(int k)
{if (!(son[sp]%k==0 || (son[sp]+1)%k==0)) return 0;memset(sum,0,(n+1)*4);fo(i,0,n-2){if (sum[v[i]]%k==0) ++sum[fa[v[i]]];elseif ((sum[v[i]]+1)%k!=0) return 0;}if (sum[1]%k==0) return 1;else return 0;
}void solve()
{scanf("%d",&n);len=0;sp=0;memset(ls,0,(n+1)*4);memset(f,0,(n+1)*8);memset(g,0,(n+1)*8);memset(son,0,(n+1)*4);memset(sum,0,(n+1)*4);fo(i,1,n-1){int x,y;scanf("%d%d",&x,&y);New(x,y),New(y,x);}if (n==2){f[1]=2;f[2]=0;}else{v.clear();dfs(0,1);g[1]=qpower(2,n-1);fo(k,2,n) g[k]=check(k);fo(i,1,n){for (int j=i; j<=n; j+=i)add(f[i],g[j]*miu[j/i]);}}fo(i,1,n) printf("%lld ",f[i]);printf("\n");
}int main()
{
//	freopen("CF1554E.in","r",stdin);init();scanf("%d",&T);for (;T;--T) solve();fclose(stdin);fclose(stdout);return 0;
}

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

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

相关文章

汽车虚拟仿真软件有哪些?行业软件大盘点!

汽车虚拟仿真可以大大提高汽车的研发效率和质量,降低成本和风险,增强汽车的竞争力和创新能力。本文将带领大家了解汽车虚拟仿真软件有哪些、汽车虚拟仿真实际应用以及汽车云交互实时渲染平台三个要点。汽车虚拟仿真是指利用计算机技术,根据汽车的设计、制造、测试、运行等各…

《机器学习》 学习记录 - 第四章

第4章 决策树 4.1 基本流程 决策树(decision tree)是一类常见的机器学习方法,也叫“判定树”。顾名思义,决策树是基于树的结构进行决策的。 一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶结点:叶结点对应于决策结果,其他每个结点则对应于一个属性测试; 每…

Fullcalendar

月光光关注作者注册登录 使用Fullcalendar管理时间计划调度安排月光光2020-01-05 阅读 4 分钟 Fullcalendar可以很好的管理日程安排事件,可以管理时间和任务调度,比如日常值班岗位安排、举办活动会议议程安排、项目行动安排、车间劳动岗位排班等等。今天我们来了解一下使用Fu…

哈希函数与数据完整性 (^=◕ᴥ◕=^)

哈希函数与数据完整性:保护猫咪世界的小鱼干 (^=◕ᴥ◕=^) 在数字世界中,我们总是希望确保传输和存储的数据没有被篡改,就像猫咪们想保护它们珍贵的小鱼干不被“偷吃”一样。为此,哈希函数(Hash Functions)成为了一个强大而可靠的工具。哈希函数能生成独特的数据“指纹”…

学期 2024-2025-1 学号 20241403 《计算机基础与程序设计》第六周学习总结

学期(如2024-2025-1) 学号(如:20241403) 《计算机基础与程序设计》第六周学习总结 作业信息这个作业属于哪个课程 <班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个…

2024 强网杯逆向 Writeups

最心有余而力不足的一集,做完 vm 颈椎病犯了,第二天根本打。最后,加上学弟学妹打的,最后剩一个 Android 逆向没 AK,要是没有颈椎病这一说肯定 AK 了。感觉快退役了... mips 编译一个 qemu-6.2.0 mips-linux-user bindiff 一下恢复符号,怀疑修改了 ELF loader 或者 syscal…

坐标系-投影

墨卡托投影墨卡托投影(Mercator Projection),是正轴等角圆柱投影。由荷兰地图学家墨卡托(G.Mercator)于1569年创立。假设地球被围在一中空的圆柱里,其基准纬线与圆柱相切(赤道)接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一…

蚂蚁KAG框架核心功能研读

首篇KAG框架解读,看蚂蚁KAG框架如何通过知识图谱和向量检索结合,增强大模型在专业领域知识服务中的准确性和逻辑推理能力,解决现有RAG技术栈的挑战。作者介绍:薛明:拥有近10年在医疗和零售领域应用机器学习和人工智能的经验。曾就职于通用电气、复星医药等企业。长期专注于…

Burpsuite下载安装超详细教程,社区版永久有效,专业版汉化激活到2099年,不看会后悔系列,亲测好用!

声明:该公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载. 未经授权,严禁转载,如需转,联系开白, 请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关.现在只对常读和星标的公众号才展示大图推送…

非对称加密:猫咪的双钥匙保护 (^• ω •^)

非对称加密:猫咪的双钥匙保护 (^• ω •^) 在之前的博客中,我们讨论了对称加密算法。这种算法使用单一密钥对数据进行加密和解密,但这也带来了一些问题,例如密钥分发和共享的安全风险。为了解决这些问题,非对称加密(Asymmetric Encryption)应运而生。 非对称加密采用…

2024.10.28(商品品牌的增删改查)

按着ALt按左键整体编辑查询功能

【shell脚本】将Shell脚本转换为Systemd服务:轻松实现自动化管理

原创 青菜浪人背景介绍 从 Ubuntu 17.10 开始,/etc/rc.local 文件不再默认存在于系统中,因为 systemd 已成为主要的初始化系统。如果需要在系统启动时自动执行某些命令,可以通过编写 Shell 脚本并将其封装为一个 systemd 服务来实现这一操作。 实现方法 这里以一个简单的脚本…