牛客网NOIP赛前集训营-提高组(第七场)
链接:B
来源:牛客网
牛牛在纸上画了N个点(从1到N编号),每个点的颜色用一个整数描述。牛牛决定用这N个点随机生成一棵树,生成的规则如下:
1、1号点是根节点
2、对于2号点到N号点,每个点随机指定一个父亲。i号点(2 <= i <= N)的父亲在i的约数中随机挑选一个。(例如10号点的父亲可以是1号,2号,5号,7号点的父亲只能是1号点)
树生成完之后,牛牛可以计算出这个树有多少个联通块,一个联通块是一些点的集合,需要满足以下两个条件:
1、从集合中任取两个点都满足:两个点颜色相同,且这两个点之间存在一条树边组成的路径,路径上的所有点都和这两个点颜色相同
2、对于集合中的任意一个点和集合外的任意一个点:两点要么不同色,要么不存在一条树边组成的路径使得路径上所有点都和这两个点同色。
牛牛希望计算出生成的树中最多有多少个联通块
简单来说就是看看每个数的约数有没有颜色和它不一样的
暴力可过,欧拉筛由于没有筛到最小质因和其他因子乘积子并不可过
链接:C
来源:牛客网
有一天,牛牛找到了一个巨大的洞穴。洞穴可以描述成一个有向图,一共有N个节点(从1到N编号)和M条长度为1的有向边,每条边从某一个节点u连向另一个节点v(u可能等于v)。
为了更好的探索洞穴,牛牛向你提出了Q个问题,每个问题给定两个节点a, b以及一个数l, 你需要告诉牛牛是否存在一条开始于a, 结束于b的路径,总长度为l。(路径中可以经过任意点、边多次,但只能沿着单向边给定的方向行走,不允许反向行走)。
离线矩阵T飞了,正解是倍增+floyd
咕咕咕