随笔分类 - 图论·网络流
摘要:题意: 计算机里配置了双核的CPU, 有 N 个原件, 知道了在每个原件在 每个CPU 上的 耗费,其中有 M 对原件需要协同工作,并且有协同工作的耗费,如果这些对原件是在同一个CPU上工作的话,就不计算协同工作的耗费。分析: 建图: 把两个CPU 分别看成是 源点和汇点。 从源点 到 每个顶点连接一条 容量为 AI 的边, 从每个顶点 到 汇点 连接一条容量为 BI 的边, 如果 两个原件具有协同工作关系,就在两个原件之间连接一条 容量为 w 的双向边。 求出的最小割即为最小费用, 而最小割可以通过求最大流来求得。#include<stdio.h>#include<stri
阅读全文
摘要:题意:有 M 个供应商,N 个店主,K 个物品, 知道了每个供应商对每个物品的供应量,每个店主对每个物品的需求量,和每个供应商把每个物品送到每个店主所需要花的费用, 问已有的货物是否可以满足所有供应商的需求,如果满足,求出供应所需花费的最小费用。分析:忘记把反向费用设为正向费用的负值,再次卡了N久 T-T...谨记之... 由于每个物品互不相关,所以可以分开求费用流,最后把所有物品的费用流加起来即为总的费用流。 建图: 源点 S=0 汇点 T=N+M+1 供应商编号 1...M 店主编号 M+1...M+N 流量边: 源点到每个供应商的边的容量为物品的供应量; 每个供应商和每个店主之间的边的容
阅读全文
摘要:题意: 已知有 n 块地,和已经存在的 m 条路径,要求找出从第 1 块地到第 n 块地的 T条不同路径,且每条路径上的道路不能与之前的路径重复,求出满足要求的路径中最长的道路最短可以是多少。分析: 二分答案,将满足条件的道路长度容量设为 1 ,求最大流,最大流即为路径的条数。EK:#include<stdio.h>#include<string.h>#include<stdlib.h>#define INF 99999999#define maxn 230#define clr(x)memset(x,0,sizeof(x))#define min(a,b)
阅读全文
摘要:题意: 有 F 种食物, D 种饮料,和 N 头牛, 每头牛只吃自己喜欢的食物,喝自己喜欢的饮料,知道了每头牛喜欢哪些 食物 和 饮料,一头牛只有在可以吃到自己喜欢的食物喝到自己喜欢的饮料的情况下才会开心,问如何分配食物和饮料可以使尽量多的牛开心。分析: 在 源点 和 每种食物之间 连一条边,容量为 1,将每头牛拆成两个点,将每头牛的第一个点和第二个点之间连一条容量为 1 的边,在每头牛喜欢的食物和该牛的第一个点之间连一条容量为 1 的边,在每头牛喜欢的饮料和该牛的第二个点之间连一条容量为 1 的边,在 汇点 和每种饮料之间连一条容量为 1 的边,求最大流。#include<stdio.
阅读全文
摘要:题意: 给你一个图HH. .m. . . . .. . . . .. . . . .mm. .Hm代表人 H 代表房子,一个人只能进一个房子,问你如何安排人进房,使得总步数最小。分析: 可以用最小费用最大流,也可以用二分图最有匹配。最小费用最大流#include<stdio.h>#include<string.h>#define min(a,b)(a)<(b)?(a):(b)#define inf 0x1f1f1fint ab(int x){ return x>0? x:-x;}int cap[500][500];int cost[500][500];int
阅读全文
摘要:题意: 给你 n 个机器,m 头牛,每台机器最多可供 cap 头牛使用,并告诉你每个物体之间的距离,找出一个距离满足所有的牛都分配到机器且里面走最远的牛 走的距离最小。分析: 用 floyd 计算出每个物体的最短距离,然后二分枚举距离,如果在该距离下满足完全匹配,该距离即为合法距离,匹配用到多重匹配。二分图多重匹配 #include<stdio.h>#include<string.h>#define clr(x)memset(x,0,sizeof(x))int cap;int link[33][202];int vlink[33];int v[33];struct no
阅读全文
摘要:DescriptionBoss xnby owns a company, as you know, in the company there are lots of jobs to do.Each job J has a processing requirementpj(denoting the number of machine days required to complete the job), a release date rj(representing the beginning of the day when job j becomes avalible for processin
阅读全文
摘要:Problem DescriptionNetwork flow is a well-known difficult problem for ACMers. Given a graph, your task is to find out the maximum flow for the weighted directed graph.InputThe first line of input contains an integer T, denoting the number of test cases.For each test case, the first line contains two
阅读全文
摘要:Problem Description给你一个n*n的格子的棋盘,每个格子里面有一个非负数。从中取出若干个数,使得任意的两个数所在的格子没有公共边,就是说所取的数所在的2个格子不能相邻,并且取出的数的和最大。Input包括多个测试实例,每个测试实例包括一个整数n 和n*n个非负数(n<=20)Output对于每个测试实例,输出可能取得的最大的和Sample Input375 15 21 75 15 28 34 70 5Sample Output188预备知识:点覆盖集:无向图G的一个点集,使得该图中所有边都至少有一个端点在该集合内。最小点权覆盖集:在带点权无向图G中,点权之和最小的覆盖集
阅读全文
摘要:Problem DescriptionEvery time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by water for awhile and takes quite a long time to regrow. Thus, Farmer John has built a set of drainage ditches so that Bessie's clover
阅读全文
摘要:Problem DescriptionNetwork flow is a well-known difficult problem for ACMers. Given a graph, your task is to find out the maximum flow for the weighted directed graph.InputThe first line of input contains an integer T, denoting the number of test cases.For each test case, the first line contains two
阅读全文
摘要:Problem DescriptionNetwork flow is a well-known difficult problem for ACMers. Given a graph, your task is to find out the maximum flow for the weighted directed graph.InputThe first line of input contains an integer T, denoting the number of test cases.For each test case, the first line contains two
阅读全文


浙公网安备 33010602011771号