06 2024 档案

摘要:原题链接 题解 转换成有向无环图,可以发现,我们先将入度为0的节点输出总是不劣的 对于环,无论从哪里开始只会改变一个节点的双倍奖励,所以从奖励最小的点开始 由于存在多个环(见样例),所以我们可以用堆来维护所有点 code #include<bits/stdc++.h> using namespace 阅读全文
posted @ 2024-06-29 22:16 纯粹的 阅读(3) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.注意,路的数量总和不超过 2·105,所以如果路没有时间限制,和普通最短路没有区别 2.由于可以原地等待,所以早到一个点一定比晚到更优 3.每到一个点,遍历所有邻边,如果这条边能在之后激活,那么看看经过这条边到达对面点的时间是否最少 code #include<bits 阅读全文
posted @ 2024-06-29 21:11 纯粹的 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 状态压缩,这一群人过去了,遍历所有上一组过去的人 code #include<bits/stdc++.h> #define lowbit(x) ((x)&(-x)) using namespace std; int dp[300000]; int w[20],t[20]; int t 阅读全文
posted @ 2024-06-29 19:11 纯粹的 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 先贪心地令 ab 配对,设最大的没有配对到的 bk 为什么?因为这样保证了留给 mb 是最大的,且原本数组的配对数量也是最优的 接下来 m 中所有小于 k 的部分可以直接与 k 配对 为什么?因 阅读全文
posted @ 2024-06-29 17:54 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 ai1·2ki1ai·2ki kilog2(ai1)log2(ai)+ki1 这里log2不能减,要在里面除,太坑了 code #include<bits/stdc++.h> #defi 阅读全文
posted @ 2024-06-29 17:07 纯粹的 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 只要存在一对线段不相交就输出yes,显然空集合以及最小的r大于等于最大的l时一定不存在 code #include<bits/stdc++.h> using namespace std; int main() { int q; cin>>q; multiset<int> l,r; w 阅读全文
posted @ 2024-06-29 16:14 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 已知l,则r越大,f(l,r) 越小,因此具有单调性,我们可以在logn的时间里找最佳r,可是如何在 O(1) 的时间里计算f(l,r)? 由于与具有重叠不变性,所以我们可以预处理每 2k 长度的区间,然后左端点所在的区间和右端点所在的区间与一下 code #inc 阅读全文
posted @ 2024-06-29 13:44 纯粹的 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 求有多少 pairgcdak 的倍数 对于 ak 求有多少 ai,ajgcd 是其倍数(降次) 遍历 k[1,n] 求对于每个 k,有多少 \(a_i,a_ 阅读全文
posted @ 2024-06-28 21:37 纯粹的 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 假设最优解的最大值点在x,那么我们可以把所有和x无交集的线段全部删掉,抽象地感觉,从x往两边扩散,每个点覆盖的线段数越来越少,因此最小值点不是在1,就是在m 由于已知最小值点,我们把所有和最小值点有交集的线段全部删掉,这样假如最大值点和最小值点有共同线段,不改变答案,假如没有共同线段 阅读全文
posted @ 2024-06-28 18:36 纯粹的 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 看数据范围,故想到做法,即遍历每个子集,看看每个子集是否具有合法的播放列表 code #include<bits/stdc++.h> #define lowbit(x) ((x)&(-x)) using namespace std; struct node { int a,b; }r 阅读全文
posted @ 2024-06-28 13:59 纯粹的 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.假设有k类球,当这k类球中数量最多的那一类的数量为m,若m不超过总数的一半,那么答案就是总数的一半+总数的奇偶性,否则答案是m 2.由于数据很小,所以可以 O(n2) 3.我们可以对所有的球类组合用数量最多的那一类球定义 code // LUOGU_RID: 16321 阅读全文
posted @ 2024-06-28 13:49 纯粹的 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 先想想能不能暴力? 可以,先预处理异或前缀和,然后遍历所有区间 能不能优化? 对于 i 来说,以其为右端点的左端点有几个? 即对于 pre[i] 来说,有几个 pre[j],j<i 能使得异或和不小于k? 再抽象点,对于 a,b,k ,其中 \(a,k 阅读全文
posted @ 2024-06-27 19:01 纯粹的 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 深搜和广搜的结合,一次性往四个方向打标记 code #include<bits/stdc++.h> using namespace std; string s[105]; int vis[105][105]={0}; int main() { int n,m; cin>>m>>n; 阅读全文
posted @ 2024-06-27 13:26 纯粹的 阅读(18) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.把天数抽象为数组,下标代表天数,值代表每天能借的教室数 2.订单抽象成区间,每个点覆盖的区间数不超过其值,问第一个无法覆盖的区间是? 3.具有单调性,考虑二分 4.区间覆盖可以用差分线性复杂度求出来 code #include<bits/stdc++.h> using names 阅读全文
posted @ 2024-06-26 16:15 纯粹的 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 我一开始想遍历每一个点,然后求出能和它配对的点的权值,但是参考菊花图,这样的速度太慢,所以考虑用一个点表示多个配对,于是发现每个点都可以作为配对的中间点 code #include<bits/stdc++.h> using namespace std; const int mod=1 阅读全文
posted @ 2024-06-26 14:56 纯粹的 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 贪心,遇到大坑就建立一条到小坑自动减少的区间 code #include<bits/stdc++.h> using namespace std; int a[100005]; int main() { int n; cin>>n; int sum=0; for(int i=1;i<= 阅读全文
posted @ 2024-06-26 13:08 纯粹的 阅读(4) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 随便找两个数字,删哪个更优? 发现了什么规律? code #include<bits/stdc++.h> using namespace std; struct node { int v,id,l,r; }c[300]; int main() { string s; cin>>s; 阅读全文
posted @ 2024-06-26 11:50 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 对于线段A,选与线段A有交叉,且结束时间比A晚的线段一定不比选线段A更优 code #include<bits/stdc++.h> using namespace std; struct node { int l,r; }seg[1000005]; bool cmp(node a,n 阅读全文
posted @ 2024-06-26 11:11 纯粹的 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 先考虑操作一,首先要数组总和不小于 s 其次,我们可以通过两边删数来得到子数组,如果两边任一边有二,我们删掉二之后, sum 减二,如果全是一,我们两边的一都删掉(数组长度大于1), sum 减二,所以如果 sum 是偶数,那么我一定能得到 \([2, 阅读全文
posted @ 2024-06-25 20:14 纯粹的 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 对于最后一个A,其右边的B都能走 对于倒数第二个A,他能走到第一个A之前的位置 ... 第一个A到最后一个B的距离 code #include<bits/stdc++.h> using namespace std; int a[15]; int solve() { int n; ci 阅读全文
posted @ 2024-06-25 19:01 纯粹的 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 对于 n 来说,所有数都比他小,所以他一定能到达数组末尾 对于 n1 来说,同理 ... 所以 1 一定要在开头 code #include<bits/stdc++.h> using namespace std; int a[15]; bool solve() { 阅读全文
posted @ 2024-06-25 18:59 纯粹的 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 如果合集不等于全集,那么全集一定有合计没有的元素,所以遍历全集的元素,然后在找出所有没有该元素的子集,累加判断大小 code #include<bits/stdc++.h> using namespace std; int a[55][55]={0}; int vis[55]={0} 阅读全文
posted @ 2024-06-23 00:04 纯粹的 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 把(当作+1,)当作-1,我们可以得到这样的图像 易得要保证翻完之后整体的合法性,[l,r] 内的左右括号数量要相等,在图上看就是 pre[l1]==pre[r] 相等 一个合法括号,要保证所有的 pre[i] 不小于0,因此反过来之后,最小的 \(pre[ 阅读全文
posted @ 2024-06-20 17:50 纯粹的 阅读(28) 评论(0) 推荐(0) 编辑
摘要:原题链接 请点击这里 这篇题解有一个小前提,那就是我们可以把变成多少种数组看成删掉哪些数 code #include<bits/stdc++.h> using namespace std; #define ll long long const ll mod = 998244353; ll a[300 阅读全文
posted @ 2024-06-19 19:52 纯粹的 阅读(3) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.观察样例易得改变是有后继性的 2.总是解题时没有思路,一点拨就有思路,怎么办? 我们要找到一些规律,即一定会发生的现象 3.当我们对一场比赛的晋级规律进行修改后,这场比赛的晋级人数取决于其先前两场比赛的晋级人数 实施 1.参考线段树,将第 i 场比赛改为id为 \(2^k 阅读全文
posted @ 2024-06-19 16:27 纯粹的 阅读(4) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.什么情况下节点代表字符串相同?当且仅当一个节点的父节点有另外一条权值相同的边 2.我们可以先固定一个节点,然后求以其为根的树,有多少个节点代表的字符串相同 3.如果已知一个节点为根的树,含有相同字符串的个数,那么其相邻节点的相同字符串个数能不能知道? 4.是可以知道的, 阅读全文
posted @ 2024-06-19 14:48 纯粹的 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 n很小,所以直接二维dp,判断每个事物在每个时刻取出来的最小值 注意当所以时刻都为200的时候,最晚可以在300取 code https://codeforces.com/problemset/problem/1437/C 阅读全文
posted @ 2024-06-18 16:28 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.改变座位之后,保持人的相对顺序不变一定使答案不劣 2.n 不是很大,因此可以考虑 O(n2) 的做法 3.令 dp[i][j] 为第 i 个人移到位置 j,且 [1,i1] 的人都已经移到了最优位置时的最小花费,\(index[ 阅读全文
posted @ 2024-06-18 16:14 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.虽说最多可以取 min(a,x) ,实际上最多可以取 x 个,因为 xa 一定成立(想想十进制是怎么表示的) 2.所以个位数的时候,先手必胜 3.所以对于每一位数来说,只要其前 [1,x] 上存在先手必败的情况,则此数先手必赢 4.由 阅读全文
posted @ 2024-06-18 15:40 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.每一个1对答案的贡献为其前面0的个数 2.不难想到二进制,即每遇到 2k 就考虑要不要放一个1 3.但是这样长度会超标,所以我们将较大的 2k 表示成 2k12k2,其中 k1+k2==k,即在 0 的个数为 \(2^{k 阅读全文
posted @ 2024-06-18 14:18 纯粹的 阅读(30) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.如果要使用计算符号,那么一定要按等于号,也就是说,需要激活的按键至少三个 2.只激活 1,+,= 可以达到任意数 3.比较数的长度和3 code #include<bits/stdc++.h> using namespace std; int main() { int t 阅读全文
posted @ 2024-06-18 11:47 纯粹的 阅读(30) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.操作1肯定选最小的 2.操作2不在乎数的大小 3.因此我们可以优先实施操作1,然后再实施操作2 code #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=2e5+5; l 阅读全文
posted @ 2024-06-18 11:41 纯粹的 阅读(5) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.缺少一个前缀和,缺少在哪了? 如果缺少在 i<n 的地方,则会出现一个两个数之和,即缺少两个数 否则会只缺少一个数 2.两个数之和可能大于 n,也可能不 3.虽然 ai 达到了 1e18 但是 n2e5 ,所以可以用数组记录出 阅读全文
posted @ 2024-06-17 23:40 纯粹的 阅读(27) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.对于任意 aiaj ,最大异或和是唯一的 2.对于 ai 来说,要想异或和最大,则 aj 要尽量满足每一位上的数相同,比如都是0,或者都是1,所以最优配对的 aj 一定是大小最接近 aiaj ,因为 阅读全文
posted @ 2024-06-17 23:12 纯粹的 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 对于一组相切的圆来说,其中一个圆变大,其相邻的圆变小,然后相邻的相邻的圆变大...而要让总半径和变小,一定得是总的变小的圆更多 实施 先判断一组圆能不能发生变化,然后再累积变大和变小的圆个数 code #include<bits/stdc++.h> using namespace s 阅读全文
posted @ 2024-06-17 21:04 纯粹的 阅读(9) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.LIS(a) 已经改变不了了,所以要让插入的 b 尽量少地增加 LIS 所以要降序、从左到右插入 2.a 的相对顺序不变 3.此时已知两个数组的相对顺序,因此我们可以贪心地输出两个数组顶端元素中较大的那个 为什么可以这样? 我们假设输出顶端元素较小 阅读全文
posted @ 2024-06-17 19:23 纯粹的 阅读(14) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.坐标i,j中,一定有一个值为n-1 2.所以另外一个数就是n-1在二进制表示下0的位置变成1,1的位置变成0的数 3.如何找到最大值?答:自己和自己或找出最大的 4.如何找到另外一个数?答:找出和最大值或最大的,再找出这些数中最小的 code #include<bits/stdc 阅读全文
posted @ 2024-06-17 18:14 纯粹的 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.如果是一百以内的合数,那么一定可以由两个不大于50的质数组成 2.交互题关键就在于询问和返回的结果 cout<<'''; fflush(stdout); cin>>... code #include<bits/stdc++.h> using namespace std; bool 阅读全文
posted @ 2024-06-17 17:35 纯粹的 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.第 i 个位置上的数,对 S 的贡献最大不会超过 ai+i,我们令其为 ci 2.我们不去细想如何操作才能得到最优解,而是去想第一大的 b 是多少?第二大的 b 是多少? 3.对 ci 降序排序得到 bi,如 阅读全文
posted @ 2024-06-17 16:08 纯粹的 阅读(40) 评论(2) 推荐(1) 编辑
摘要:原题链接 题解 1.最小距离是n+m-2 2.后退多少就要前进多少,所以合法距离一定是偶数 3.猜测并验证n+m,n+m+2,n+m+4是否可行 4.如果n+m,我可以在终点设一个弯 5.如果n+m+2,我可以在起点设一个弯 6.两个弯可以组成任意偶数 code #include<bits/stdc 阅读全文
posted @ 2024-06-16 23:21 纯粹的 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.只需要求最大值和最小值之差,所以最大值和最小值之间放几个数放什么数都无所谓 2.既然只需要求最大值和最小值,那么我们可以把数组升序排序,然后求以每个值为最大值时,与最小值的差 3.按照升序排序后,最大值越大,最小值不会更小 code #include<bits/stdc++.h> 阅读全文
posted @ 2024-06-16 12:06 纯粹的 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 对某一片区域+1-1等操作,二维差分,注意每一维的含义和往下一维转移的细节就行了 code #include<bits/stdc++.h> using namespace std; int wave1[3005]={0},wave2[3005]={0}; int sum[3005]= 阅读全文
posted @ 2024-06-14 18:56 纯粹的 阅读(22) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.暴力枚举每一个区间,然后加和  O(n2) 如何优化?考虑到区间异或和不一定每一位都对答案有贡献,所以我们只考虑对答案有贡献的区间 2.遍历每一位,找出能使他对答案有贡献的区间个数,再乘上区间长度 细节 由于有求模运算,所以减法可能会出现负数,通过加一个模数解 阅读全文
posted @ 2024-06-14 16:37 纯粹的 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 n+1会发生什么? 答案可不可以用结尾的状态来定义? 可不可以用结尾的状态来转移? code #include<bits/stdc++.h> using namespace std; #define ll long long const ll mod=998244353; ll dp 阅读全文
posted @ 2024-06-14 15:28 纯粹的 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 最大深度·k-与节点1的距离·c 其中最大深度只要知道了节点1的最大深度,其子节点的最大深度可分类讨论得出 code #include<bits/stdc++.h> #define ll long long using namespace std; vector<ll> G[2000 阅读全文
posted @ 2024-06-14 14:17 纯粹的 阅读(4) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 给定一系列关系,然后求出最多有几个坏人 关系如下: 1.如果 AB 是好人 若 A 是好人 ,则 B 也是好人 若 A 是坏人 ,则 B 也是坏人 2.如果 A 说 B 是坏人 若 A 是好人 ,则 B 是坏人 若 A 是坏人 ,则 B 是好人 我们构建集合,令 阅读全文
posted @ 2024-06-13 23:34 纯粹的 阅读(7) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.先想想能不能暴力? 发现好像不行,因为不知道哪些元素组合的按位与能恰好有k个1 2.观察数据范围,发现 ai63 也就是说,按位与的结果最大不会大于63 ,即 6 位 1 ,这暗示着我们可能可以从这里入手,即遍历所有按位与的情况,然后判断每种有k个1的按位与 阅读全文
posted @ 2024-06-13 21:16 纯粹的 阅读(3) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 先不考虑k的限制,而是考虑对于任意一个数,存不存在一个k使得题目所给等式成立 当 n·k 没有进位时,等式一定成立 (赛时也许想到这就够了) 假如有进位呢? 对于任何一个位数大于1的数,必有 D(n)<n (想想十进制是怎么表示数的) 而对于位数为1的数,有 阅读全文
posted @ 2024-06-13 19:58 纯粹的 阅读(118) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.由于一回合可以使用多次技能,所以直接二分回合数即可 2.回合数最多为 410 code #include<bits/stdc++.h> using namespace std; #define ll long long ll a[200005],c[200005]; 阅读全文
posted @ 2024-06-13 19:11 纯粹的 阅读(70) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 对于区间,其末尾,要么没有操作过,要么被最后一个元素往前操作,要么被前面的元素往后操作 code #include<bits/stdc++.h> using namespace std; #define ll long long ll a[300005]; ll dpl[300005 阅读全文
posted @ 2024-06-12 17:35 纯粹的 阅读(31) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 找到每一个点右边能递增多远和左边能递增多远 code #include<bits/stdc++.h> using namespace std; int a[100005],r[100005],l[100005]; int main() { int n,m; cin>>n>>m; fo 阅读全文
posted @ 2024-06-12 11:27 纯粹的 阅读(4) 评论(0) 推荐(0) 编辑
摘要:原题链接 一句话题解 由于t必须要包含非a字符,所以假如t包含前k个非a字符,那么s所包含的非a字符数量一定是k的倍数 实施 遍历t能包含几个非a字符,然后再算有几种填充a的方法 复杂度 logn·n 之所以有logn是因为遍历s包含的非a字符数量的因子 code #include<bits 阅读全文
posted @ 2024-06-11 22:15 纯粹的 阅读(38) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 由于使用操作二会让负数变成正数,所以我们考虑让操作二在c最小且为负数的点使用 在使用完操作二之后,之后的c肯定非负,所以在此之后两种操作都可以使用 实施 先判断存不存在c最小且为负数的点,然后再统计所有c最小且为负数的点的贡献 code #include<bits/stdc++.h> 阅读全文
posted @ 2024-06-11 14:07 纯粹的 阅读(85) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 首先,玩家一先选,那么玩家一该选最左边还是最右边呢? 我们假设玩家一有穿越时空的能力,知晓了选择左边后的最大得分和选了右边后的最大得分,那么玩家一便能确定选哪个 设 dp[l][r] 为当区间为 l,r 时先手最大分数 选左边的最大得分: \(sumr-dp[2][r 阅读全文
posted @ 2024-06-08 17:36 纯粹的 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 真tm麻烦 先考虑只有一个数的情况 假如我是后手,由于每次可以减123,无论对手减多少,我总可以使这一轮这个数总共减去的值为四的倍数 恰好当n位4的时候先手必败,所以如果一个数为四的倍数时,先手必败 考虑多个数 数组里,有的数是4的倍数,有的不是。 此时假设我是先手,遇到四的倍数,我 阅读全文
posted @ 2024-06-08 17:03 纯粹的 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 贪心走最小的点,由于每个点都有偶数条边,所以能进入就一定能出去 code #include<bits/stdc++.h> using namespace std; struct node { int to,id; }; vector<node> G[505]; int late[50 阅读全文
posted @ 2024-06-08 14:16 纯粹的 阅读(13) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 关键因素:调和级数 1n+1n1+...+12+11 可以近似看成 log(n) code #include<bits/stdc++.h> using namespace std; #defin 阅读全文
posted @ 2024-06-08 12:02 纯粹的 阅读(12) 评论(0) 推荐(0) 编辑
摘要:原题链接 一句话题意 分别找出长度为n,每位数字和恰好为m的最小数和最大数,如果找不到输出”-1 -1“ 思维 怎么确保构造的数最小/大? 怎么确保数字和恰好为m? 实施 遍历每一位,贪心地选取最大/最小的数,直到接下来的数字不足以贪心 细节 1.没有前导零 2.数字和恰好为m 3.注意边界特判 c 阅读全文
posted @ 2024-06-06 16:11 纯粹的 阅读(10) 评论(0) 推荐(0) 编辑
摘要:原题链接 教训 1.计算几何,能用乘法就不用除法 2.计算几何,开longlong 3.计算几何,注意直线的特殊性 code #include<bits/stdc++.h> #define ll long long using namespace std; struct node { ll x1,y 阅读全文
posted @ 2024-06-05 16:29 纯粹的 阅读(6) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 请仔细读题!!! 如果1号工人需要提供原材料,那么代表 ai1 存在一条长度为 Li 的路径(可以重复走) 由于重复走不会改变路径长度的奇偶性,所以一定存在一条奇偶性相同,且长度小于 Li 的路径,所以只要求从点1出发到各个点奇偶最短路即可 c 阅读全文
posted @ 2024-06-04 15:08 纯粹的 阅读(79) 评论(0) 推荐(0) 编辑
摘要:原题链接 大概思路 我们已知一组不等式的解可以通过建边然后求最短路/最长路来得出 而这里要求 DnD1 的最大值,所以我们要求最短路。 补充 为什么要求最短路? 对于任何一组不等式,我们都可以写成 aibici 建边含义 假设 DnD1 有最大 阅读全文
posted @ 2024-06-04 14:04 纯粹的 阅读(11) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 分层图,太奥妙了 每层图都是一样的 d=0 的边建的图, d=1 就像梯子,可以去上一层走,总共有三层 code #include<bits/stdc++.h> using namespace std; #define ll long long inline void 阅读全文
posted @ 2024-06-03 22:18 纯粹的 阅读(8) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 1.集合+搜索 2.把数字看成间隔而不是点 3.类似于差分约束,这里的建边意味着相对大小,根据传递性可知,如果ab建边,bc建边,那么ac之间的关系也能确定,可以用搜索维护 所以unknown代表两个点没有之间或者间接的边相连,可以用集合维护 code #include<bits/s 阅读全文
posted @ 2024-06-03 14:53 纯粹的 阅读(20) 评论(0) 推荐(0) 编辑
摘要:原题链接 题解 把这里的数字看成间隔,不要看成点 假设已知能和 l 组成区间的端点集合 A 和以 r 组成区间的端点集合 B,这时候加入一个以 l,r 为左右端点的区间,那么在加入区间 l,r 之后,这两个集合可以合并 code #include<bi 阅读全文
posted @ 2024-06-03 13:05 纯粹的 阅读(12) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示