图论太菜了呀,那怎么办呀,刷点题吧,写下来可以以后复习?或者造福后人?这blog估计也没什么用?
大概就从这开始刷吧:Link

简单题解

  • 786B 区间图最段路
  • 741C 构造题 二分图
  • 567E 最短路DAG必经边
  • 527E 欧拉回路
  • 1147D 建图 划分等价类
  • 724D 图 线性基
  • 1023F 生成树 思维
  • 571C 建图 定向 思维
  • 627D 二分 DP
  • 85E 二分 染色
  • 542E 推理
  • 141E 拟阵推理
  • 266D 直接做
  • 825G 拓扑排序 贪心
  • 241E 差分约束 输出方案
  • 8E 数位DP
  • 1209F Dij最短路+字典树比字典序
  • 346D SPFA
  • 480D DP
  • 132E 最小费用流:DAG的某种带权覆盖?
  • 358E 欧拉路径
  • 311C 最短路
  • 813F 时间线段树 + 可撤销带权并查集
  • 1218D 仙人掌 + FWT
  • 45H 树补成边双

786B 区间图最段路

没啥好说的,标准的区间图最短路,建议整理板子。我的板子:Link

741C 构造题 二分图

很容易被搞到2-sat上去,但是猜到一定有解的情况下, 构造出二分图就做完了。我反正智商是没了。

567E 最短路DAG必经边

可以通过方案数来确定一条边是否必经,最好双模,曾经被卡过QAQ。简单题。

527E 欧拉回路

首先容易想到要先把每个点的度数补成偶数,这是必要的。然后这个条件就让人想到存在欧拉回路,然后构造答案:如果回路长度是奇数,增加一个自环,变成偶数。偶数则直接给边按照左右左右这样定向就做完了。我反正智商又没了。
大概就是把欧拉回路类比成简单环去考虑吧,这样就比较容易想到这样构造了?

1147D 建图 划分等价类

首先要枚举a的位数,因为a前边那些0是不参与回文的。将a,b的每一位取0,1分别建一个点,总共4n个点,然后回文,异或这两个条件会产生一些等价条件,使用并查集维护。然后还有一些值已经确定了,比如b首位是1,a前边若干个0,然后有一位是1,在检查完合法性之后,剩下的自由元可以任意取值,答案就是一个2的幂次。
有点类似于2-sat吧,但是因为这里是等价关系(双向边),就比较简单了。数自由元需要用到图是对称的。

724D 图 线性基

这个题比较套路。。有三个要素:无向图,路径长度定义为异或和,不必要简单路径。
这三个东西导致了一个套路:两点间的所有路径的值可以由任意一条路径的值,再经过任意的环组合。那我们只需要将所有的环的路径值加入到线性基里面,就可以轻松处理答案了。
而环是不可能全找出来的,但是由于一个环可以由其他的环组合出来,且要维护的是异或基,因此只需要找到一些基环(基向量),让他们足够来组合(张成)出所有的环(向量)即可。

1023F 生成树 思维

给边定值的时候,边的考虑顺序不会影响答案。
(原图只需要保留一个mst)证明:假设有两条虚线的边是我们的边,红色蓝色紫色都是原树的边,现在想要同时加入这两个虚线边。首先显然加一条边的时候,需要把这个边的值定为树上路径上的最小值,同时删掉树上那个最小的边。
那么只需要讨论两条路径上要删掉的那个最小边的位置,很容易就能证明。

由于输入已经排好序了,直接并查集。

571C 建图 定向 思维

一些预处理是很简单的:如果一个变量只出现了aaa或者只出现了∼a\sim a∼a,则可直接确定这个变量的取值,然后将该合取式删除,这会导致一些新的变量出现上边这样的情况,所以要跑一个拓扑排序。
剩下的就只有每个变量在一个合取式中是aaa,在另一个合取式中是∼a\sim a∼a,显然这个aaa变量只能使得一个合取式得到满足,因此我们在这两个合取式间连一个边,我们要做的是给边定向,使得每个点都至少有一个入度,显然树是非法的(只有n-1个边,只能满足n-1个合取式),其他都是合法的,任意找一个环,然后先把环定向,其他的就搞一个基环外向树。
题目中每个变量至多出现在两个合取式的条件,已经明示了做法,想到建图就做完了。

627D 二分 DP

二分+DP,有一些细节需要仔细讨论一下。

85E 二分 染色

最大值最小,直接二分答案,然后在不满足条件的点之间连边,然后要求这个图可以二染色,直接dfs走一遍check就行,一个连通块方案数为2,因此总方案数是2component2^{component}2component.

542E 推理

容易从三元环发现只要存在奇数长度的环,则一定是-1,这等价于判断能否二染色。
然后这个题很重要的东西就是环了,容易观察到一些结论:1如果有多个连通块,则答案是各个连通块的和,2如果是一棵树,答案就是直径,3长度为2n的裸环答案是n(对折)。再分析一下就能发现:以任意两点为链的端点,链长将等于这两点的最短路,因为他是最短的,没办法附体到其他的链上。然后就做完了。

141E 拟阵推理

先求只用S边的生成森林,然后再加入一些M边,变成一棵树,这些M边是必选的。
然后重新再来一次,先加入必选的M边,然后再加入一些M边,使得M边总数达到一半。
之后再尝试加入所有S边,即得到答案。
严格证明要用拟阵推。
所以我为什么乱搞谢了个 随机边权+wqs二分??仿佛一个睿智。

266D 直接做

开始想到很多骚操作,但是你画一个环就能全否掉,基本都用了树的性质,不能推广到一般图。
这题就是找图的绝对重心(我看其他博客是这么叫的?) 做法肯定是枚举每一条边(u,v,w)(u,v,w)(u,v,w),求这条边上的答案。很不幸,答案没有三分性质。设重心点和uuu的距离是LLL,则答案= min⁡{max⁡{min⁡(dis[i][u]+L,dis[i][v]+w−L)}}\min{\{\max{{\{\min(dis[i][u] + L,dis[i][v] + w - L)\}}}}\}min{max{min(dis[i][u]+L,dis[i][v]+w−L)}}
最内层的那个东西是一个天线函数,然后多个天线函数取max,然后求这个图像的最小值。直接做就行了。

825G 拓扑排序 贪心

直接拓扑排序,每个点贪心选择。

241E 差分约束 输出方案

每条边(u,v)(u,v)(u,v),转换成两个约束dis[u]≤dis[v]−1dis[u] \le dis[v] - 1dis[u]≤dis[v]−1和dis[v]≤dis[u]+2dis[v] \le dis[u] + 2dis[v]≤dis[u]+2,然后注意先跑两遍把1-n的DAG子图抠出来,然后跑差分约束,并输出方案。

8E 数位DP

这题是个数位DP啊?
但强行图论也能做,但是不能过。首先我们建8n8n8n个点,分别代表原串、反串、逆串、逆反串每个位置是0还是1,然后逐位确定来求字典序,求方案数的时候,只需要把所有限制关系(包括四个串本身的对应关系,以及字典序限制,字典序直接n3n^3n3枚举决定字典序的位置)用并查集合并出来,然后检查完所有冲突之后,数自由元的数量,答案就是一个2的幂。但是这样是O(8∗n5)O(8*n^5)O(8∗n5)很难过。

1209F Dij最短路+字典树比字典序

用字典树存每个点的完整答案,然后跑Dijkstra最短路,需要字典树支持比较两个点的串字典序的操作,那当然是求lca了,用st倍增动态维护就好了。比赛时候没调出来,system test完就调对了。

346D SPFA

如果是DAG的话好做。dp[u]=min⁡{max⁡{dp[v]},min⁡{dp[v]}+1}dp[u] = \min{\{\max{\{dp[v]\}},\min{\{dp[v]\} + 1} \}}dp[u]=min{max{dp[v]},min{dp[v]}+1}
但是这个题是有向图。别问,问就SPFA。不想写了。

480D DP

如题 DP。直接在DAG上DP很不方便,转成时间区间做DP。非要说跟图有啥关系的话呢。。这个DP很像是树的dfs序DP。

132E 最小费用流:DAG的某种带权覆盖?

根据题意可以很容易作出一个完全图DAG:对于任意点对(i<j)(i < j)(i<j),连接一条iii到jjj的边,如果a[i]=a[j]a[i] = a[j]a[i]=a[j],则边权是0,否则是popcount(a[j])popcount(a[j])popcount(a[j])。再来一个超级起点SSS,SSS连向所有点iii,边权是popcount(a[i])popcount(a[i])popcount(a[i])。

那么这题求的就是,选出至多mmm个边不相交的路径,使得每个点被覆盖且只覆盖一次,最小化边的权值总和。

建图方法是:每个点拆成两个点:入点AAA,和出点BBB,连接一条(cost=−inf,flow=1)(cost = -inf, flow = 1)(cost=−inf,flow=1)的从AAA到BBB的边,然后跑最小费用流(不是最小费用最大流),这样可以保证所有cost=−infcost = -infcost=−inf的边都被用过,即实现了点的覆盖的要求。

然后输出方案。。。

358E 欧拉路径

找到图中最长的连续1,则答案只可能是该长度的因子,只有根号种,每种判断即可,注意细节,判定等价于关键点图上存在欧拉路径。

311C 最短路

因为kkk小,只需要求出%k=i\%k = i%k=i的点能到达的最小点是什么,其他更大的%k=i\%k=i%k=i的点都是可以从这个点+v⋅k+v\cdot k+v⋅k到达。建图跑最短路即可。剩下的随便用优先队列做就行了。

813F 时间线段树 + 可撤销带权并查集

如题。

1218D 仙人掌 + FWT

只有42个环的仙人掌,求异或意义下的最小生成树计数,也就是每个环选一个边删掉,直接42个FWT卷积出来方案数,然后就是类似字典树找异或最小值,实现的时候不需要lca数据结构,也不需要字典树,简单粗暴就行了。
这题还卡了方案数%Mod=0\%Mod=0%Mod=0的情况。
一般的仙人掌 也可以做啊?,复杂度不坏于O(B∗M∗2B)O(\sqrt{B * M} * 2^B)O(B∗M​∗2B)。

45H 树补成边双

先把原图缩成树,然后答案是(叶子+1)/2,先随便扔掉一个点,剩下偶数个点按照dfs序排序,然后分成前一半和后一半,按照顺序相互连边,最后那个单独的随便连。

Codeforces 图论板刷总结(更新中)相关推荐

  1. 网络流题目详讲+题单(提高版)(持续更新中......)

    网络流题目详讲+题单(提高版)(持续更新中......) 标签:图论--网络流 PS:如果你觉得自己还不够强(和我一样弱),可以去入门版看看 阅读体验:https://zybuluo.com/Junl ...

  2. linux运维常用命令一句话(持续更新中)

    整理收集一些Linux运维管理.系统管理的常用命令,太多了记不住,只能记录下来方便日后查看.也可以和大家分享.如果你有好的一句话命令也贴出来吧.本文持续更新中. 1.linux启动过程 开启电源 -- ...

  3. 深入理解JS的面向对象(更新中)

    面向对象是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.CAD技术.人工智能等领域.面向对象是一种对现实世 ...

  4. .NET Core微服务之路:不断更新中的目录 (v0.42)

    原文:.NET Core微服务之路:不断更新中的目录 (v0.42) 微服务架构,对于从事JAVA架构的童鞋来说,早已不是什么新鲜的事儿,他们有鼎鼎大名的Spring Cloud这样的全家桶框架支撑, ...

  5. 初学Oracle的笔记(2)——基础内容(实时更新中..)

    续 初学Oracle的笔记(1)--基础内容(实时更新中..) 1.oracle中创建一张表,写法与sql server中的一样. SQL> create table Course 2 ( cn ...

  6. db2dual_DB2常用SQL的写法(持续更新中...)

    DB2常用SQL的写法(持续更新中...) -- Author: lavasoft -- Date  :  2006-12-14 -- 创建一个自定义单值类型 create  distinct typ ...

  7. linux的网络命令整理 更新中

    linux的网络命令整理 更新中 1.安装包: net-tools 主要命令: netstat , ifconfig , route , iptunnel iproute 主要命令: ss , ip ...

  8. 【STM32-V7】STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2020-07-22)

    [STM32-V7]STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2020-07-22) 参考文章: (1)[STM32-V7]STM32H743XIH6开 ...

  9. linux中oracle静默安装失败,oracle 11 Linux 静默安装 步骤及错误解决(更新中)

    oracle 11 Linux 静默安装 步骤及错误解决(更新中) oracle 11 Linux 静默安装 步骤及错误解决(更新中) [待更新] oracle成功安装完成后 显示的页面如下 : 此时 ...

最新文章

  1. linux 命令 sys_call_table地址,Linux x86_64 内核查找sys_call_table注意事项
  2. 一、cocos2dx之如何优化内存使用(高级篇)
  3. 评分卡中的一些理论知识
  4. 在AIX上编译Samba
  5. PAT乙级 1094 谷歌的招聘(柳婼代码,测试点1、2、4、5分析)
  6. 从数组到 HashMap 之算法解释
  7. 阶乘末尾连续零的个数
  8. python的追加_Python追加添加相同的数据
  9. ad09只在一定范围内查找相似对象_重磅!Excel更新了超级查找函数XLOOKUP,可以对VLOOKUP说拜拜了...
  10. 人体姿态识别OpenPose
  11. 阅卷系统java语言_主观题阅卷系统
  12. JAVA ANDROID电脑开发环境配置,说多了都是泪
  13. 单相全桥逆变电路工作过程
  14. java里面不等于怎么打_不等于在c语言中怎么打
  15. C++——迪杰斯特拉算法弗洛伊德算法(DijkstraFloyd)for Neuedu
  16. 什么是VLAN?为什么要划分VLAN?
  17. jQuery 点击图片左右滚动
  18. 在线压力并发工具AB版 简单易用
  19. 富士施乐2022网络扫描设置_富士施乐sc2020网络扫描怎么设置?
  20. 计算机术语fsb是什么意思,fsb(电脑术语:前端总线)_百度百科

热门文章

  1. TCP三次握手四次挥手
  2. 不知道如何录音转文字?分享两个实用方法
  3. 如何无痛写文章 - 《麦肯锡教我的写作武器》
  4. python中复数的实部和虚部都是浮点数_Python基础:数值(布尔型、整型、长整型、浮点型、复数)...
  5. AlphaZero登上Science封面:从小白开始制霸多个游戏
  6. 移动端UI界面设计之-注册登录
  7. 泥瓦匠之 Java 的成长感悟
  8. leetcodeLCP 19. 秋叶收藏集/动态规划
  9. 软件安全技术(概述、堆栈漏洞)总结
  10. 数字功放和模拟功放差异介绍