随笔分类 - 图论
摘要:gate 有向图求最短路,需要进行三种操作: 点向点连边 点向区间连边 区间向点连边 用线段树优化建图可以解决。 建立两棵线段树,一棵存入边,一棵存出边 入边: 出边: 所以线段树看起来应该是这样子的: 线段树内的边权为0。 code #include<cstdio> #include<iost
阅读全文
摘要:单源最短路 Dijkstra 堆优化,用距离最小的点更新其他节点。 不能处理有负权边的图。 O(mlogn) void dijkstra(int s) { priority_queue <pair<int,int>,vector<pair<int,int> >,greater<pai
阅读全文
摘要:gate 差分约束系统用来解决: 给出n个变量x1...xn,m个形如xi−xj≤k(k为任意常量)的式子, 求x1...xn的一组可行解。 将式子变形为xi≤xj+k,发现刚好符合三角形不等式$dis[v]\le dis[u]+w[i]
阅读全文
摘要:gate 用时:debug时间90分钟。 先读m再读n 我是傻逼(1/1) 题目大意: 有m个房子,n个顾客。第i个房子里有ai只猪;第i个顾客可以买至多bi只猪,且可以打开房子c1,c2,...cj,这些同时被打开的房子中,剩余的猪的可以互相转移。求最多卖出的
阅读全文
摘要:gate 用时:看了题解之后20min左右吧... 给一个N×N的网格,有k个障碍物,每次可以消灭一行或一列的障碍物,问至少几次可以清空。 把横、纵分为两个点集,每个障碍物(i,j)即在i,j连一条边。 Konig定理:最小覆盖数 = 最大匹配数 求二分图匹配即可
阅读全文
摘要:gate 用时:断断续续地debug,大概用了120min? 板子题. 求将一个无向图变成边双联通图最少的加边数. 结论:设原图叶子节点(入度为1的)的数量为x,答案即为(x+1)/2 证明:将叶子节点两两相连. 首先tarjan求出所有强连通分量,只保留割边. 缩点后判断有多少入度为1
阅读全文
摘要:gate 用时:大概60min 睡前随便水一发博客,摸了 有向图,一个点向其他点连边(传递信息)。 问:1.至少选多少点作为源点,使所有点都能收到信息。2.至少连多少边,使任选一点作为源点,都能使所有点收到消息。 显然每个强联通分量内的点可以互相到达,所以先缩点。 1的答案即为入度为0的点的个数。
阅读全文
摘要:gate 保证有欧拉回路,输出路径 这道题的话是字典序,实现的时候从1到n枚举就好了,先不管它qwq 找到度数为奇数的的点作为起点(没有的话就任意一个), dfs,回溯时把点压进栈。 为什么不能遍跑dfs边压?考虑这张图: 边跑边压的结果是1,2,3,2,4,5,而正解(回溯)是1,2,4,5,2,
阅读全文
摘要:gate tarjan判环,若一对夫妻在同一scc中则不稳定。 构造成有向图, 当前婚姻状况 女→男 连边,曾经交往的 男→女 连边。 代码如下 #include<cstdio> #include<iostream> #include<cmath> #include<cstring> #includ
阅读全文
摘要:N(1 ≤ N ≤ 1,000)个不同颜色的不透明矩形被摆放在了一个白色的宽A高B(1 ≤ A,B ≤ 10,000)的网格上,矩形的边与网格的边平行。所有的长方形都放置在网格内,所以我们会看到不同形状的各种颜色。 坐标系统的原点(0,0)设在这张白纸的左下角,而坐标轴则平行于网格边缘。求最后能看到
阅读全文
摘要:传送门 作为给dtx的妹子讲题的交换他给我讲的 果然线段树最可爱了w 扫描线可以用来求矩形的面积并… 一个平面上有一些有重叠的矩形,求他们的并集的面积。 直接放网上的图了x 对于每个矩形,将y坐标拆成两个修改操作(插入和删除),从下到上排序; 将x坐标unique离散化,从左到右排序,用线段树维护切
阅读全文
摘要:传送门 我记得这题我去年写了树的做法,而且好像是用链前存的图xp总之还得了些分 树的部分,贪心+dfs即可。 基环树的部分,n^2暴力枚举断哪一条边...可以到88‘ 加上快读,去掉vector...总之我乱搞优化到了96' 吸氧过了... 正解似乎应该用tarjan判环,据说是nlogn (等会去
阅读全文
摘要:传送门 为了方便以后抄自己代码 如果一个点入队次数超过n次,说明有负环
阅读全文
摘要:传送门qwq 刚学会网络流,把网络流24题按难度sort一下,第一个蓝题就不会...(某二分图匹配除外) 于是又跑去学了最小费用最大流。 听说网络流的难点就在于建图,似乎感受到一点了... 这道题和飞行员匹配一样,需要用到超级源点和汇点。 既然要平均分配,那么首先可以先算出平均值。 高于平均值的仓库
阅读全文
摘要:传送门 最小费用最大流,就是在求最大流的前提下,使选出的路径费用最小。 每条边除了容量w[]外,还要记录一个单位流量费用co[]。 其实就是dinic的bfs和SPFA同时进行, 每次更新增广路时,保证选择的一定是费用最小的一条路径。 (paopo说这个用不了当前弧优化,所以我就没用
阅读全文
摘要:传送门 二分图匹配模版题… 不过既然作为网络流24题,当然是可以用网络流做的qwq 自己规定一个源点和一个汇点,将源点-所有外籍飞行员、所有英国飞行员-汇点、输入的外籍飞行员-英国飞行员连容量为1的边, 跑dinic,最后检查不包括s,t的边,若反向边有容量,则输出这条边所连的两个飞行员 因为源点和
阅读全文
摘要:传送门 NOIP之前,我绝对不学网络流。 ——我 网络流可以解决这样一类问题:给定一个有向图,每条边有一个流量上限,求从源点到汇点所能运输的最大流量。 解决这类问题的一种算法叫做dinic。 一些性质 对于任意一个时刻,设c(u,v)为容量,f(u,v)为实际流量,则整个图G的流网络满足3个性质
阅读全文
摘要:传送门 二分图:设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。 二分图匹配:给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条
阅读全文
摘要:gate 求出一条s到t的路径,使得这条路径上经过最高温度最小的前提下,总长度最短。 什么最大值最小很容易想到二分...就每次枚举最高温度然后在这个温度下跑最短路看是否连通。 但是这道题也可以用最小生成树的算法来做qwq 想要温度尽量小,就以温度为关键字,跑一遍最小生成树,就得到了使s,t连通所需要
阅读全文