摘要:
Solution 对每个点进行贡献统计,搞了半天搞不出来。结果是对每条边进行统计,计算会被经过多少次。能想到这个应该是由于题目要求算路径长度,这和每条边被经过的次数挂钩。这个转换真是巧妙。 首先有一个显然的性质,集合点一定在若干关键点的中间位置。 考虑枚举每一条边,由于是一棵树,所以断掉这条边会把图 阅读全文
摘要:
Solution 每两个点都有一条有向边,所以是一个完全有向图。每次走最短的路径,所以是三元环(手玩样例亦可得)。 所以问题就转换为了统计有向图三元环期望个数。考虑转换补集的思想,一共可能有 \(\binom{n}{3}\) 个环,再减去不是环的。发现如果三个点构不成环,那么一定有其中一个点有两条出 阅读全文
摘要:
Solution (没有定根就非常的离谱,后来告诉根直接就是 $1$) 先考虑链上怎么做,显然维护一个单调栈,求出第一个比当前数大的位置,然后倍增即可。再放在树上怎么做?依旧维护单调栈,但这次不能暴力地弹掉栈顶元素了,因为这样的复杂度是假的。因为单调栈有单调性,所以直接在单调栈内二分出单调栈弹得不能 阅读全文
摘要:
[BalkanOI2018]Election Solution 推式子题,然后转换。考场上没有耐心,实际上应该能想出来。 Solution 答案是将 \(C\) 看成 $1$,\(T\) 看成 \(-1\) 后,区间和减去区间最大子段和。 #include<stdio.h> #define N 50 阅读全文
摘要:
[BalticOI 2009]甲虫 Solution 比较套路的区间dp,先按坐标排序,再找出零点所在位置,记为 \(pos\)。设状态 \(dp[i][j][0/1]\) 表示取完区间 \([i,j]\) 的所有水滴且最后位置在左边/右边的最大收益,但时间不好算,可以再开一个 \(t[i][j][ 阅读全文
摘要:
[BalticOI 2008]手套 Description 有两个可重集 \(A\) 和 \(B\),每个集合里有若干元素,每种元素有若干个。可以选择从 \(A\) 集中等概率随机选 \(x\) 个到 \(C 集\),从 \(B\) 中等概率随机选择 \(y\) 个到 \(D\),使得一定会使 \( 阅读全文
摘要:
Solution 思路太妙,我想不到 一个位置的机器人能及时到达另一个位置去接糖果,当且仅当位置之差小于等于时间差,从 \(i\) 走到 \(j\) 用符号表示为 \(T_j-T_i\geq |S_j-S_i|\) 把绝对值拆掉 $$\begin T_j-T_i\geq S_j-S_i\ T_j-T 阅读全文
摘要:
Solution 可以发现,如一条边是白边,那么连接它的两个端点最后一次被修改,是同一个修改操作造成的,否则它就会被其中一个修改操作变成黑边。又发现如果一条边的两个端点修改时间戳不一样,就会在查询的链里面多开出一段颜色,所以统计一条链上的黑边个数,就是统计有多少条边的两个端点时间戳不同,即整条链上的 阅读全文
摘要:
Solution 有一个显然的方法是筛出所有素数,再枚举其中三个,判断一下剩下的是不是素数,但十万以内的素数有九千多个,考虑优化。利用折半的思想,先将所有两个素数能并出来方案预处理出来,用 \(mp[x]\) 表示 \(x\) 用两个素数能凑出来的方案数。然后再枚举后面两个素数 ,记为 \(p_1\ 阅读全文
摘要:
Solution 确实是简单题。边权和最小显然是最小生成树。对于一条非树边,加到树里面一定会构成一个环,那么环上的树边的边权就一定不能超过这条非树边。所以对最小生成树进行重链剖分,对于一条非树边 \((u_i,v_i)\) ,对链 \(u_i\to v_i\) 进行 \(modify\),维护一个最 阅读全文