图论
四维2000
SW2000
展开
-
HDU - 6808 Go Running(图论)
一.题意:给出n(1e5)个点,问最少几个斜着的线可以覆盖所有的点二.分析:用二分图最大匹配即最小点覆盖的性质做题,把每个点当作一条边,点所在的斜线当作点,然后这两条斜线所代表的点直接建一条有向边,然后跑二分图匹配就好了,亲测匈牙利算法会超时,dinic就可以卡着边过去.三.代码:#include <bits/stdc++.h>#define fi first#define se second#define mid (l+r>>1)#define lo (o&.原创 2020-10-09 21:13:21 · 161 阅读 · 0 评论 -
HDU4689 Prince and Princess (Tarjan+匈牙利匹配)
题意:n个王子,m个公主(n,m<500),王子喜欢公主就可以匹配,问在总匹配数最多的情况下,每个王子都可以匹配哪几个公主。分析:POJ1904的加强版本,感觉要想做出这题要先搞懂这个简单版。感觉这题的建图是真的神仙,要不看题解根本想不到,看完题解写完后也还是无法完全理解。现在想来大体思路就是,王子喜欢公主就连一条边过去,表示想象成可以把爱传过去,然后需要用二分图匹配求出当匹配数最多时,每个公主所接受的爱意是谁,这时可以理解为公主接受了来自这个王子的求爱,所以这样建图后,在一一匹配的情况下原创 2020-09-25 18:19:15 · 108 阅读 · 0 评论 -
POJ 3177 Redundant Paths(Tarjan)
题意:无向连通图,问最少加几条边可以使得双连通解析:用tarjan缩点后求度数为1的点,最后的答案是点数/2向上取整代码:#include <cmath> //定义数学函数#include <cstdio> //定义输入/输出函数#include <cstdlib> //定义杂项函数及内存分配函数#include <cstring> //字符串处理#include <algorithm> //STL 通用算法#include原创 2020-09-25 10:07:33 · 91 阅读 · 0 评论 -
POJ 3695 nework (Tarjan的并查集变形)
题意:一棵无向连通图,存在重边,q次操作每次加一条边,问每次加边后的割边数。解析:最朴实的思想是缩点然后对树上不断求lca,虽然可以但是有点麻烦。可以把low数组的含义改变下,不再存dfn_cnt的最小值,而是可以到达的dfn最小点的下标,这样实际上跑一遍tarjan就可以求出一个用并查集维护好的树。这样修改时只需要不断向上合并父节点就可以了,感觉这个思路很巧妙,是对于tarjan思想的一种变形改造。代码:#include <cmath> //定义数学函数#include <原创 2020-09-25 09:10:13 · 95 阅读 · 0 评论 -
HDU2242空调教室 (Tarjan)
题意:给出一个含重边的无向联通图,以及每个点的权值,让你割掉一条边将图分成两部分使得权值和最接近,输出这两部分权值和的差,如果不存在这样的边就输出impossible。题解:我是通过把tarjan算法改了下就过了,但是感觉对于tarjan算法的核心原理理解的还差的很多,可能思路的细节上还有问题,我就写下大致的思路,就是说再对每个点tarjan时维护一个上一个的值,这样就可以保证不在同一条边走回头路,同时为处理重边的问题,再维护一个bool性的flag,也就是说只对于第一次出现的重边不做处理,之后再出现就原创 2020-09-22 20:57:57 · 326 阅读 · 0 评论 -
HDU 6705 Path (二分+搜索)
题意:给一个有向带权图,找图中第k大的路径思路:不同于常规的优先队列的做法,我考虑的是只要定一个路径的最大值,就可以通过暴力枚举来得出所有不小于这个最大值的路径值,这个暴力的复杂度是O(max(k))的,因此通过二分这个最大值,就可以找到一个满足条件的路径序列,这个路径序列只需要大于等于查询的最大值max(k)就可以,如果序列数小于查询数就扩大最大值,如果大于就减小最大值,由于可能存在一些相同的路径,因此无法保证小于某个值的路径数完全等于max(k),所以在判断序列数过多时需要把ma再多加100。代原创 2020-09-11 09:05:39 · 157 阅读 · 0 评论 -
2019CCPCharbin F - Fixing Banners(dfs/匈牙利匹配)
题意:给六个字符串每个字符串选一个字母组成“harbin”思路:当时看到这题时我第一感觉是dfs,队友cg因为刚刚学过匈牙利匹配大喊这是匈牙利匹配,好像还吓到了隔壁桌的朋友,不过在cg再抄了许久板子之后发现板子有问题。。。最后还是用dfs过的。补题时也是用dfs写,但是发现如果剪枝不彻底会T,如今在学了匈牙利匹配后(发现其实不是很难的算法),又用匈牙利匹配a了一发,理论上匈牙利复杂度最坏6^3...原创 2020-02-09 17:04:35 · 454 阅读 · 0 评论 -
UVA - 10480 Sabotage (网络流最小割)
题意:源点1,汇点2,无向边,让求最小割的边是那些思路:用dinic跑一遍,之后对边进行并查集,最后找出最小割的边,其中还需要根据边是否为0跑两边,感觉挺麻烦的。但是看别人的题解发现可以直接对最后的边跑一下bfs,等到跑断的那个边就是最小割了,感觉还是很妙的,另外由于数据很小ek也可以跑过去。代码:#include<bits/stdc++.h>#define x...原创 2020-02-08 19:36:06 · 203 阅读 · 0 评论 -
POJ - 2195 Going Home (费用流)
题意:一个100*100的图上有n个房子n个人(n<=100),每个人到房子的距离为笛卡尔坐标,且不受障碍影响,问每个人回到一个单独的家所需要的最小费用建立一个超级源点和超级汇点,每条边都是流量为1,这样可以保证在最大流的时候每个人都匹配一个房子,之后为每个人和每个房子之间赋上所需的费用,跑一边费用流板子就可以了。套板子所需要注意的细节有起始点和终点是0和t1*2+1,还有费用是每条...原创 2020-02-08 18:08:27 · 128 阅读 · 0 评论