随笔分类 - 图论
UVa 1663 Purifying Machine (二分匹配)
摘要:题意:每一个01串中最多含有一个‘*’,‘*’既可表示0也可表示1,给出一些等长的这样的01串,问最少能用多少个这样的串表示出这些串。 如:000、010、0*1表示000、010、001、011,最少只需用00*、01*这两个即可表示出来。 析:因为最多只有一个星,所以每个串最多能代表两个串,所以
阅读全文
UVa 10801 Lift Hopping (Dijkstra)
摘要:题意:有一栋100层的大楼(标号为0~99),里面有n个电梯(不超过5个),以及要到达的层数(aid),然后是每个电梯走一层所需的时间, 再n行就是对应每个电梯可以到达的层数,数量不定。然后每装换一次电梯需要等待60秒,问,最快能多快到达目标层数。 析:把所有的楼层当作结点,电梯能到达的不同楼层之间
阅读全文
POJ 3281 Dining (网络流之最大流)
摘要:题意:农夫为他的 N (1 ≤ N ≤ 100) 牛准备了 F (1 ≤ F ≤ 100)种食物和 D (1 ≤ D ≤ 100) 种饮料。每头牛都有各自喜欢的食物和饮料, 而每种食物或饮料只能分配给一头牛。最多能有多少头牛可以同时得到喜欢的食物和饮料? 析:是一个经典网络流的题,建立一个超级源点,
阅读全文
UVa 1627 Team them up! (01背包+二分图)
摘要:题意:给n个分成两个组,保证每个组的人都相互认识,并且两组人数相差最少,给出一种方案。 析:首先我们可以知道如果某两个人不认识,那么他们肯定在不同的分组中,所以我们可以根据这个结论构造成一个图,如果两个不相互认识, 那么就加一条边,然后如果这个图是二分图,那么这分组是可以,否则就是不可能的。然后dp
阅读全文
UVa 1660 Cable TV Network (最大流,最小割)
摘要:题意:求一个无向图的点连通度。 析:把每个点拆成两个,然后中间连接一个容量为1的边,然后固定一个源点,枚举每个汇点,最小割。 代码如下:
阅读全文
UVa 820 Internet Bandwidth (裸板网络流)
摘要:题意:有一个计算机网络,输入节点数n,输入网络流源点和汇点src,des,再输入双向边数m。给出m条边的负载,求最大流。 析:直接上网络流的最大流。 代码如下:
阅读全文
POJ 3662 Telephone Lines (二分+dijkstra)
摘要:题意: 多年以后,笨笨长大了,成为了电话线布置师。由于地震使得某市的电话线全部损坏,笨笨是负责接到震中市的负责人。 该市周围分布着N(1<=N<=1000)根据1……n顺序编号的废弃的电话线杆,任意两根线杆之间没有电话线连接,一共有p(1<=p<=10000)对电话杆可以拉电话线。 其他的由于地震使
阅读全文
UVa 1001 Say Cheese (Dijkstra)
摘要:题意:给定一个三维空间的一些球和起始位置和结束位置,问你最短要花的时间是多少。 析:建图,所有的位置都建立图,边权就是距离,最小求一次最短路即可。 代码如下:
阅读全文
UVa 12661 Funny Car Racing (dijkstra)
摘要:题意:给定一个有向图,每条路有5个整数修饰,u, v, a, b, t,表示起点为u,终点为v,打开时间a,关闭时间为b,通过时间为t,打开关闭是交替进行的, 问你从s到t最短时间是多少。 析:使用dijkstra算法,从每个结点出发,求最短路,并维护时间的最小值,这个可以用优先队列,然后考虑能不能
阅读全文
UVa 1349 Optimal Bus Route Design (最佳完美匹配)
摘要:题意:给定一个有向图,让你找出若干个图,使得每个点恰好属于一个圈,并且总的权和最小。 析:每个点都有唯一的一个圈,也就是说每一点都有唯一的后继,那么我们就可以转换成求一个图的最小权的最佳完全匹配,可以用最小费用流来求, 先把每个结点拆成两个点,假设是x,y,然后建立一个源点,向每个点的x连一条容量为
阅读全文
UVa 1658 Admiral (最小费用流)
摘要:题意:给定一个图,求1-n的两条不相交的路线,并且权值和最小。 析:最小费用流,把每个结点都拆成两个点,中间连一条容量为1的边,然后一个作为入点,另一个是出点。最后跑两次最小费用流就行了。 代码如下:
阅读全文
UVa 11082 Matrix Decompressing (网络流)
摘要:题意:给定一个矩阵的每行每列的前缀和,矩阵的元素是1-20,求这个矩阵。 析:一个网络流题,首先先把每个点的数减1,那么元素就成了0-19,这样就是一个普通的网络流了,建立一个源点和汇点,源点向每行连一条边, 汇点向每列连一条边,每个行向每个列连一条容量为19的边,其他的边都是相应的容量。最后跑一次
阅读全文
UVa 753 A Plug for UNIX (最大流)
摘要:题意:给定 n 种插座,m种设备,和k个转换器,问你最少有几台设备不能匹配。 析:一个很裸的网络流,直接上模板就行,建立一个源点s和汇点t,源点和每个设备连一条边,每个插座和汇点连一条边,然后再连转换器, 最后跑一次最大流即可。 代码如下:
阅读全文
UVa 658 It's not a Bug, it's a Feature! (状态压缩+Dijstra)
摘要:题意:首先给出n和m,表示有n个bug和m个补丁。一开始存在n个bug,用1表示一个bug存在0表示不存在,所以一开始就是n个1,我们的目的是要消除所有的bug, 所以目标状态就是n个0。对于每个补丁,会给出使用这个补丁的时间,另外会给出两个长度为n的字符串,第一个字符串表示这个补丁适用于什么情况下
阅读全文
HDU 1885 Key Task (BFS + 状态压缩)
摘要:题意:给定一个n*m的矩阵,里面有门,有钥匙,有出口,问你逃出去的最短路径是多少。 析:这很明显是一个BFS,但是,里面又有其他的东西,所以我们考虑状态压缩,定义三维BFS,最后一维表示拿到钥匙的状态,然后再BFS,就简单了。 代码如下:
阅读全文
UVa 1161 Objective: Berlin (最大流)
摘要:题意:给定一些航班,每个航班有人数,和起始终止时间,每次转机要花半小时,问限制时间内最多能有多少人从起始城市到终点城市。 析:差不多是裸板网络流的最大流问题,把每个航班都拆成两个点,这两个点之间连接一条流量为这个航班的容量,然后再暴力去查看能不能连接,如果能, 那么就连接一条容量无限的边,然后在源点
阅读全文
数据结构 通畅工程 (最小生成树)
摘要:Description 在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。 Input 有多组输入数据。每组第一行输入三个整数n、m、c(1<=n,m,c<=100000),分别代表城市数量,可建道路数量和单位长度道路修建费用。接下来m行每行三个整数u、v(1<=u,v<=n)、d(1<
阅读全文
数据结构 校园导游程序 (Floyd)
摘要:Description 给定用无向网表示你所在学校的校园景点平面图(图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息)。要求能够回答有关景点介绍、游览路径等问题。 Input 输入第一行为测试数据组数。每组数据第一行为3个整数n(2<=n<=200
阅读全文
数据结构 娱乐中心选址 (Floyd+暴力)
摘要:Description 有n个地点编号1~n,在其中一个地点建立娱乐中心,要求该点距其它各地点的最长往返路程最短,相同条件下总的往返路程和越短越好,如果仍相同,取编号最小的地点,问娱乐中心应选址何处? Input 第一行输入测试数据组数。每组数据第一行输入地点数n(2≤n≤300),路径数m(0≤m
阅读全文