随笔分类 - 图论
UVaLive 4043 Ants (最佳完美匹配)
摘要:题意:给定 n 个只蚂蚁和 n 棵树的坐标,问怎么匹配使得每个蚂蚁到树的连线不相交。 析:可以把蚂蚁和树分别看成是两类,那么就是一个完全匹配就好,但是要他们的连线不相交,那么就得考虑,最佳完美匹配是可以的,为什么呢,假设有两条线段a1-b1和a2-b2,那么如果相交,dist(a1, b1) + d
阅读全文
Gym 101201G Maximum Islands (最大独立集)
摘要:题意:给定一个图,L代表陆地,W代表水,C表示不确定,问你最多有多少岛。 析:首先给定的L周围必须是是W,只有这样才是最优的,因为如果是L,那么还得有另外的W来包围,不是最优的,那么剩下的就剩下C了,因为要是L多,那么肯定是一个岛屿只有一个L,这样是最优的,并且周围都是W,所以可以把C看成一个点,然
阅读全文
Gym 101201F Illumination (Two-Sat)
摘要:题意:一个n*n的房子,有很多灯,每个格子只能被上下方向照一次、左右方向照一次,每个灯可以选择上下或是左右照,照明长度以自身位置为中心,占用2*r+1个格子。问能否安排一种方案,使所有格子满足条件。 析:典型的Two-Sat,对于行来说,如果两个能够交叉,那么他们不能都是左右,对于列也是一样。 代码
阅读全文
SGU 194 Reactor Cooling (有容量和下界的可行流)
摘要:题意:给定上一个有容量和下界的网络,让你求出一组可行解。 析:先建立一个超级源点 s 和汇点 t ,然后在输入时记录到每个结点的下界的和,建边的时候就建立c - b的最后再建立 s 和 t , 在建立时,如果 i 结点的输入的大于输出的,那么就是从 s 建立一条边,否则 i 与 t 建立,然后跑一次
阅读全文
HDU 6214 Smallest Minimum Cut (最小割且边数最少)
摘要:题意:给定上一个有向图,求 s - t 的最小割且边数最少。 析:设边的容量是w,边数为m,只要把每边打容量变成 w * (m+1) + 1,然后跑一个最大流,最大流%(m+1),就是答案。 代码如下:
阅读全文
UVa 11478 Halum (差分约束)
摘要:题意:给定一个有向图,每条边都有一个权值,每次你可以选择一个结点v和整数d,把所有以v为终点的边权值减少d,把所有以v为起点的边权值增加d,最后要让所有的边权值非负且最大。 析:首先二分答案,很容易想到,令sum(u) 表示作用在 u 结点的所有d的和,然后对于一条 u 到 v 的边,要满足大于 a
阅读全文
UVa 11090 Going in Cycle!! (Bellman_Ford)
摘要:题意:给定一个加权有向图,求平均权值最小的回路。 析:先十分答案,假设答案是 ans,那么有这么一个回路,w1+w2+w3+...+wk < k*ans,这样就是答案太大,然后移项可得,(w1-ans)+(w2-ans)+(w3-ans) + ..+(wk-ans) < 0,这样的话就判断是不是有负
阅读全文
UVa 3211 Now or later (二分+2-Sat)
摘要:题意:有 n 架飞机,每个飞机早着陆,或者晚着陆,让你安排一个方式,让他们着陆的时间间隔尽量大。 析:首先对于时间间隔,可以用二分来解决,然后就成了一个判定性问题,然后怎么判断该时间间隔是不是成立呢,那么用2-Sat能解决,每次对于时间间隔都小于正在判定的,然后给他们连上相应的边,是连两条,然后跑一
阅读全文
UVa 11324 The Largest Clique (强连通分量+DP)
摘要:题意:给定一个有向图,求一个最大的结点集,使得任意两个结点,要么 u 能到 v,要么 v 到u。 析:首先,如果是同一个连通分量,那么要么全选,要么全不选,然后我们就可以先把强连通分量先求出来,然后缩成一个点,然后该图就成了一个DAG,然后就可以直接用DP来做了。 代码如下:
阅读全文
HDU 6007 Mr. Panda and Crystal (背包+spfa)
摘要:题意:你生活在一个魔法大陆上,你有n 魔力, 这个大陆上有m 种魔法水晶,还有n 种合成水晶的方式,每种水晶价格告诉你,并且告诉你哪些水晶你能直接造出来,哪些你必须合成才能造出来,问你n魔力最多能卖多少钱的水晶? 析:首先知道的是,如果每个所消耗的魔法水晶固定,那么这就是一个背包问题,很简单就能搞定
阅读全文
HDU 6005 Pandaland (Dijkstra)
摘要:题意:给定一个图,找出一个最小环。 析:暴力枚举每一条,然后把边设置为最大值,以后就不用改回来了,然后跑一遍最短路,跑 n 次就好。 代码如下:
阅读全文
HDU 3729 I'm Telling the Truth (二分匹配)
摘要:题意:给定 n 个人成绩排名区间,然后问你最多有多少人成绩是真实的。 析:真是没想到二分匹配,。。。。后来看到,一下子就明白了,原来是水题,二分匹配,只要把每个人和他对应的区间连起来就好,跑一次二分匹配,裸的。 代码如下:
阅读全文
HDU 2819 Swap (二分匹配+破输出)
摘要:题意:给定上一个01矩阵,让你变成一个对角全是 1 的矩阵。 析:二分匹配,把行和列看成两个集合,用匈牙利算法就可以解决,主要是在输出解,在比赛时一紧张不知道怎么输出了。 输出应该是要把 match[i] = i 这样的输出,然后再改掉后面那个,真是个大傻逼输出,气死了。。。。。 代码如下:
阅读全文
CodeForces 400D Dima and Bacteria (并查集+Floyd)
摘要:题意:给出 n 个细菌,m 种仪器,细菌有 k 种,每种细菌数量 c[i],给出从第 ui 细菌到第 vi 个细菌转化需要的花费。判断同种细菌之间的转化是不是花费都可以是0,如果可以再输出不同种细菌之间转化的最小花费。 析:首先要判断是同种细菌是不是转化花费为0,如果数据小的话,可以用Floyd,但
阅读全文
POJ 3411 Paid Roads (状态压缩+BFS)
摘要:题意:有n座城市和m(1<=n,m<=10)条路。现在要从城市1到城市n。有些路是要收费的,从a城市到b城市,如果之前到过c城市,那么只要付P的钱, 如果没有去过就付R的钱。求的是最少要花多少钱。 析:BFS,然后由于走的路线不同,甚至边或者点都可能多走,所以用状态压缩。然后本题有坑啊,有重连,而且
阅读全文
HDU 5971 Wrestling Match (二分图)
摘要:题意:给定n个人的两两比赛,每个人要么是good 要么是bad,现在问你能不能唯一确定并且是合理的。 析:其实就是一个二分图染色,如果产生矛盾了就是不能,否则就是可以的。 代码如下:
阅读全文
ZOJ 3946 Highway Project (最短路)
摘要:题意:单源最短路,给你一些路,给你这些路的长度,给你修这些路的话费,求最短路和最小花费。 析:本质就是一个最短路,不过要维护两个值罢了,在维护花费时要维护的是该路要花多少,而不是总的路线花费。 代码如下:
阅读全文
Gym 101142C CodeCoder vs TopForces (搜索)
摘要:题意:每个人有2种排名,对于A只要有一种排名高于B,那么A就能赢B,再如果B能赢C,那么A也能赢C,要求输出每个人分别能赢多少个人 析:首先把题意先读对了,然后我们可以建立一个图,先按第一种排名排序,然后从高的向向低的连一条边,然后再按第二种排序,同理连线。 最后dfs一次,要先从排名低的开始遍历,
阅读全文
POJ 3723 Conscription (最小生成树)
摘要:题意:给定 n 个男人,m 个女人,和 r 个男女之间的关系,每个征募一个人要用10000元,但是如果有关系可以少花一些钱,即10000-亲密度, 求一个最小要花多少钱。 析:最后生成的关系肯定是一片森林,也就是最大权森林,但是我可以把权值取反,然后就是一个求最小森林了。 代码如下:
阅读全文
POJ 3255 Roadblocks (次短路)
摘要:题意:给定一个图,求一条1-n的次短路。 析:次短路就是最短路再长一点呗,我们可以和求最短路一样,再多维护一个数组,来记录次短路。 代码如下:
阅读全文