A | Garden |
---|---|
B | Browser |
C | Permute Digits |
D | Almost Acyclic Graph |
E | Physical Education Lessons |
F | Imbalance Value of a Tree |
G | Coprime Arrays |
A. Garden
题意
读入 n,k 以及 n 个数,对于 kmodai==0求max(kai)
题解
1 |
|
B. Browser
题意
有 n 个窗口,鼠标位置在 pos ,需要关掉 l−r 的窗口,一次移动,一次关闭需要 1s 求最小需要多少秒。
鼠标在位置 pos 可以关闭窗口 [1, i − 1],[i+1,n]
题解
1 |
|
C. Permute Digits
题意
读入 a,b ,改变 a 的排列,求出最大的 a 且 a<b
题解
把 a 拆掉从大到小排序,然后贪心的去填坑。
a,b中某一位相等的情况要注意后面按照最小的方案去填是否满足条件。
a中某一位如果小于b中该位,填完之后直接把后面的从大到小排就好。
如果a最小的排列都比b要大,直接gg
a的位数没b的位数多,直接从大到小输出。
细节不算很多。
1 |
|
D.Almost Acyclic Graph
题意
给你 n个点 m 条边的有向图,问可以不可以删去至多一条边使整个图没有环(n≤500,m≤100,000)
题解
这范围可以枚边,但是判环的复杂度是 O(n+m)的,直接gg。
开始在想如何 O(n) 判环,然后发现我想多了。
对于最开始就不在任意一个环的边,可以最开始拓扑判环,然后扫的时候不管了。
对于在环内的边,x->y ,只有在删去这条边之后,y的入度变为0,去跑拓扑判环才有用。
这样最多枚 n 条边
复杂度就是 O(n∗(n+m))
1 |
|
E. Physical Education Lessons
题意
一共有 n天,最开始n天都是工作日。
然后有m个操作,a b c,当c=1时,a->b天变成休息日,c=2时a->b天变成工作日。
题解
直接线段树。
不过要离散一下。
然后我的线段树左端点是不包括在内的,所以开始要-1。
1 |
|
F. Imbalance Value of a Tree
题意
一颗树,设I(i,j) 表示i->j这条路径上最大的点权-最小的点权,求 n∑i=1n∑j=iI(i,j)
题解
这种题显然考虑每个点对答案的贡献。
这里只写如何求最大的点权的贡献,最小的同理。
最开始是打算用类似于点分治的方法,从点权最大的点开始,算贡献,然后分开处理每个子树,每个子树又找点权最大的。然后发现这种方法可以被卡掉。
然后又想把点权排下序,先算最大的点的贡献,然后把那个点删了,处理次大的。然后发现,这样处理找不到每颗树的size(除开重新扫一遍)。
然后看了一眼,标签,“并查集”,哦这道题不应该去分开,而应该是合并。
于是我们可以按点权从小到大排序,对于点u,设v为与u有直接连边的点。当a[u]>a[v]时,把v设为u的子树。
点u的点权,只会对 (u的其中一颗子树中的点,到其他子树的任意一个点)这条路径产生贡献。
然后不要算重了。 注意点权相同的情况下合并应该要注意细节。
1 |
|
G. Coprime Arrays
题意
$ n\le210^6 个空, m\le 210^6 个询问,对 1\le i\le m :只用\le i的数字填进 n 个空,有多少种方案使数组的总 gcd=1 ,对于第i组询问求出来的答案异或i$,求所有询问的答案的和
题解
很容易推出来
f(i)=i∑d=1μ(d)⌊id⌋n
预处理出1~m的n的次方,然后整除分块就可以了。
然后t飞。
然后把每个式子拆了打了一个表,
可以发现,对于μ(i),1-i-1项的系数相同,i~2i-1项的系数相同。然后可以前缀和搞搞了。
复杂度 O(klnk)
1 |
|