随笔分类 -  暑假ACM集训第三周复习用整理

1
摘要:题目链接 题目含义 说了一大堆,就是发电站发电,中转站不用电不发电,用户用电,而且每个都有一个电流的限制 问用户们最多能得到多少电 题目分析 用一个超级源头指向所有发电站,最大容量是他们的发电量 将所有用户指向一个终点,最大容量是他们的用电量 于是就变成了一个最简单的最大流 以后遇到类似的题,像这样 阅读全文
posted @ 2019-08-03 19:20 helman78 阅读(167) 评论(0) 推荐(0)
摘要:题目链接 模板题练练手 题目代码 要建反向边,记得结构数大小乘二哦 阅读全文
posted @ 2019-08-03 19:05 helman78 阅读(93) 评论(0) 推荐(0)
摘要:题目链接 题目含义 有一个机器人比赛,只要a能打败b,b能打败c,a就一定能打败c 然后给出一堆比赛的结果,如果不能得到唯一的所有的机器人战力排名,就输出-1 如果可以的话,最少能用前几场比赛结果能得到,输出这个最少的比赛次数 题目分析 使用拓扑排序,如果出队数不等于机器人数或者某一时刻队列有两个及 阅读全文
posted @ 2019-08-02 23:33 helman78 阅读(221) 评论(0) 推荐(0)
摘要:题目链接 题目含义 给出很多一对数,代表这两个人认识 要你将这些人分成两堆,一堆中的人互不认识(就是判定无负环) 如果可以的话,问最大匹配 题目分析 二分图染色模板题 注意这里二分代表的两个集合都是n个学生,如果你建双向边,最后最大匹配数要除2 题目代码 阅读全文
posted @ 2019-08-02 20:21 helman78 阅读(134) 评论(0) 推荐(0)
摘要:题目链接 题目含义 两个机器分别有n,m种模式,每个工作需要任一机器达到某个模式,问最少要变换几次模式 题目分析 将两个机器的n,m种模式作为二分图的两个集合,每个工作代表之间的一条线 题目可以化为求能覆盖所有边的最少点(取a或b的点都可以) 然后根据定理,可以转化成求最大匹配 注意,当工作需要机器 阅读全文
posted @ 2019-08-02 19:55 helman78 阅读(137) 评论(0) 推荐(0)
摘要:题目链接 题目含义 每门课有几名同学参加,要求每门课选一个代表,当然代表只能由参加这门课的学生中选,并且一个人只能当一门课的代表 题目分析 二分图匹配,是课程去找一个同学与它匹配,如果每门课都匹配上了就输出yes,否则no 题目代码 阅读全文
posted @ 2019-08-02 19:30 helman78 阅读(102) 评论(0) 推荐(0)
摘要:题目链接 题目含义 给出一个图,每个强连通图都要寻找一个点 要求寻找的点的价值之和最少,并且问这个最低价值有几种选法 题目分析 使用Tarjan算法,每次找到一个强连通图时出栈,并在出栈过程寻找最低价值的点和这个点的个数 最后把每个强连通图的最低价值加起来,个数都相乘就得到最后答案 有一个需要注意的 阅读全文
posted @ 2019-08-01 22:05 helman78 阅读(330) 评论(0) 推荐(0)
摘要:题目链接 题目含义 判断一个图是不是强连通图,即任意两点存在双向通道 题目分析 用Tarjan可以算出这个图中的强连通图有多少个,如果不是1那当然输出No 而如果是1,只能说明有一个强连通子图而不能说明这个图是强连通图,就需要在当dfn[x]==low[x]时,找到这个强连通图所有的点,将他们全部指 阅读全文
posted @ 2019-08-01 20:30 helman78 阅读(336) 评论(0) 推荐(0)
摘要:题目链接 题目含义 欧拉欧拉欧拉欧拉欧拉欧拉欧拉 题目分析 只要满足每个节点度数是偶数,并且每个点都连通,那么就一定有欧拉回路 度数在加边就能记录,而连通性用一个并查集就行了 相比其他图论,这真的最简单的了 题目代码 阅读全文
posted @ 2019-08-01 19:21 helman78 阅读(173) 评论(0) 推荐(0)
摘要:题目链接 题目含义 给出一堆区间,要求一个集合V与这些区间都共同含有两个以上不同的整数 题目分析 用sum[x]来表示[0,x]内包含V集合整数的个数 那么区间[a,b]则说明sum[b]-sum[a-1]>=2 在求最长路 if (dis[v]<dis[u]+w) dis[v]=dis[u]+w; 阅读全文
posted @ 2019-07-31 22:14 helman78 阅读(110) 评论(0) 推荐(0)
摘要:题目链接 题目含义 在一个图上,要从点s到点t,最多可以省去k条路的花费,问最少花费 题目分析 如果不看省去k条路花费的话,就是一个求最短路 考虑k条路花费的话,就是一个分层图 建立二维数组dis[maxn][k+1],具体的细节其实和求最短差不多 当然省去花费的路越多,花费越少,最后输出dis[t 阅读全文
posted @ 2019-07-31 20:13 helman78 阅读(164) 评论(0) 推荐(0)
摘要:题目链接 题目含义 一个人想去朋友家,最短路不走,想走次短路,而且长度严格小于最短路 题目分析 次短路的模板题,还是挺简单的 但是与求最短路不同 Dijstra算法里此时队列中dis最小的点的dis即是它的最短路,就将它出队处理接下来的点就行了 而求次短路时,如果这个点像求最短路一样出队的话,万一这 阅读全文
posted @ 2019-07-31 19:56 helman78 阅读(480) 评论(0) 推荐(0)
摘要:题目链接 今天集训学长没有给负环的题,所以一下子全都用Dijkstra做了,SPFA都没练习到,所以专门把这道不卡SPFA的题拿来练练 题目含义 求1到其他点的最短距离之和,加上其他点到1的最短距离之和 题目分析 求1到其他点的最短距离之和,也就是单源最短路径,Dijkstra和SPFA应该都行 而 阅读全文
posted @ 2019-07-31 19:04 helman78 阅读(158) 评论(0) 推荐(0)
摘要:题目链接 题目含义 建树,如果树里有环就输出YES,如果没有就输出最大直径 题目分析 可以用并查集来判断有没有环,如果当前是树,那么每个节点都在一个集合内 此时树内任意两个节点加上一条边都会成环 接下来的工作就是求最大直径了 这里我是用的DP法求直径,不知道两次DFS行不行 但要注意的是,全部的节点 阅读全文
posted @ 2019-07-30 22:35 helman78 阅读(181) 评论(0) 推荐(0)
摘要:题目链接 题目含义 找出每台电脑距离最远电脑的长度 题目分析 对于节点v来说,如果最长长度在它的子树里,我们取dp[u][0] 否则,最长长度要经过它的父节点u,v的最长长度=dis(u,v)+u的最长长度 第一种情况,如果u的最长长度经过v这个子节点,那么很明显最长长度不可取,那我们就要去第二长长 阅读全文
posted @ 2019-07-30 22:15 helman78 阅读(112) 评论(0) 推荐(0)
摘要:题目链接 题目含义 求树上两个点到第三个点重合路径的最大长度 题目分析 设三个点为A,B,C dis(A,B)=deep[a]+deep[b]-2*deep[lca(A,B)] 所以这是个求最近公共祖宗的题 那么答案可以由两种方法求 (1)若以C为第三个点,求( dis(a,c)+dis(b,c)- 阅读全文
posted @ 2019-07-30 21:44 helman78 阅读(214) 评论(0) 推荐(0)
摘要:题目链接 题目含义 建树,求两个数的最近公共祖宗 题目分析 LCA入门模板题,还有一个树上倍增法不会 所以就只用Tarjan算法了 题目代码 阅读全文
posted @ 2019-07-30 19:08 helman78 阅读(130) 评论(0) 推荐(0)
摘要:题目链接 题目含义 就是建一个树,让你求最大直径 下面用分别用DP和DFS的方法 题目代码 #include<iostream> #include<stdio.h> #include<string.h> using namespace std; const int maxn=5e4+7; int n 阅读全文
posted @ 2019-07-30 18:33 helman78 阅读(130) 评论(0) 推荐(0)
摘要:题目链接 题目含义 第一行给出城堡个数N和背包容量M 第i+1行给出i的父亲以及i的权值 求装m个城堡能得到的最大权值 题目分析 入门的树形背包 题目代码 阅读全文
posted @ 2019-07-29 20:27 helman78 阅读(94) 评论(0) 推荐(0)
摘要:推荐一个博主写的——关于树形DP中求最小支配集,覆盖集,独立集的博客 他写的关于树形DP代码的解释很好懂 虽然还有求重心,树形背包什么的没讲,不过对于我这样刚入门的人来说应该是够了 最小支配集——POJ3659 题目含义 有1到N个点,给出点两两的相邻关系,这个图的最小支配集 题目分析 简单易懂的最 阅读全文
posted @ 2019-07-29 20:13 helman78 阅读(109) 评论(0) 推荐(0)

1