摘要: ACWING 367 学校网络 367. 学校网络 - AcWing题库 第一问:求出强连通分量,答案就是起点个数 第二问:结论:若把一个 DAG 变成一个 强连通分量,则需要加 \(max(起点个数,终点个数)\) 条边 ​ 当 DAG 只有一个点时特判加 0 条边 #include <iostr 阅读全文
posted @ 2022-05-18 11:40 hzy0227 阅读(7) 评论(0) 推荐(0) 编辑
摘要: C - Berland Regional 算贡献 表面上若从 \(1\) 到 \(n\) 枚举 \(k\), 再枚举每个学校对第 \(k\) 个答案的贡献,复杂度为 \(O(n^2)\) 但因为一共只有 \(n\) 个学生,设每个学校有 \(cnt_i\) 个学生,那么每个学校最多只会对前 \(cn 阅读全文
posted @ 2022-05-17 23:25 hzy0227 阅读(18) 评论(0) 推荐(0) 编辑
摘要: D - Maximum Sum of Products 区间DP 可先算出不反转任何子区间的答案 \(sum\) 再利用 区间DP 算出反转 \([l,r]\) 的话会比原来的答案多多少,记为 \(f[l][r]\) 转移:\(f[l][r]=f[l+1][r-1]+a[l]*b[r]+a[r]*b 阅读全文
posted @ 2022-05-17 23:03 hzy0227 阅读(14) 评论(0) 推荐(0) 编辑
摘要: D - Min Cost String 若尽量让满足 \(s[i]==s[j],\;s[i+1]==s[j+1],\;i<j\) 的 \((i,j)\) 对越少,若把 \(a-z\) 视为 \(0-25\) 可构造一种策略:记录一个 \(cnt[i]\) 表示数字 \(i\) 已经出现了几次,出现第 阅读全文
posted @ 2022-05-17 22:58 hzy0227 阅读(22) 评论(0) 推荐(0) 编辑
摘要: E - Assimilation IV 注意到 \(n\) 很小,可以算每个点被至少一个城市覆盖的概率,相加就是期望 本题中直接算点被覆盖的概率并不容易,可以算点没有被任何一个城市覆盖的概率 注意到 \(d(i,j)\) 也很小,最大不超过 \(n+1\) 可以枚举每个点,按距离从小到大给这 \(n 阅读全文
posted @ 2022-05-17 22:32 hzy0227 阅读(42) 评论(0) 推荐(0) 编辑
摘要: POJ - 3579 Median 二分套二分 Median - POJ 3579 - Virtual Judge (vjudge.net) 对数轴上的点排序后,可枚举左端点,固定左端点后,区间长度关于右端点是单调递增的,因此可以二分 二分答案 check 返回有多少区间小于当前的二分值,求有多少区 阅读全文
posted @ 2022-05-17 21:45 hzy0227 阅读(15) 评论(0) 推荐(0) 编辑
摘要: POJ - 3685 Matrix 二分套二分 Matrix - POJ 3685 - Virtual Judge (vjudge.net) \(f(i,j)=i^2+10^5*i+j^2-10^5*j+i*j\) \(f\) 关于 \(i\) 单调递增,关于 \(j\) 单调递减 要找第 \(m\ 阅读全文
posted @ 2022-05-17 21:41 hzy0227 阅读(25) 评论(0) 推荐(0) 编辑
摘要: 受欢迎的牛 缩点 USACO03FALL / HAOI2006] 受欢迎的牛 G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 用 tarjan 缩点后,在每个强连通分量中的点都可以互相到达。 在 DAG 中 如果有大于 1 个出口,则两个出口之间肯定不能相互到达,所以没有明星 阅读全文
posted @ 2022-05-17 21:32 hzy0227 阅读(17) 评论(0) 推荐(0) 编辑
摘要: SCC 性质: 缩点后为DAG 若一个 DAG 中点的最大出度和最大入度分别为 p, q, 则最少再加 \(max(p,q)\) 条边可以使整个图变成一个 SCC tarjan 求 SCC vector<int> G[N]; int tin[N], tim; int scc_cnt, sz[N], 阅读全文
posted @ 2022-05-17 21:26 hzy0227 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 树状数组 逆序对 #include <iostream> #include <cstring> #include <algorithm> #define int long long using namespace std; const int N = 5e5 + 10; int tr[N], ran 阅读全文
posted @ 2022-05-16 23:56 hzy0227 阅读(22) 评论(0) 推荐(0) 编辑