摘要:给出一个map,再给出几个星星的坐标,问用枪可以一次打一行或者一列的星星,问至少打几次可以把所有星星打完....建图,最大匹配问题,左边是x横坐标的点,右边是y纵坐标,然后当某个星星在x,y 点上时候说明可以在x行或者y列打枪因此把x-y连一条边,最终就是求最小的点覆盖所有的边(即和所有的边有关联)=最大匹配,直接匈牙利模版水过#include <stdio.h>#include <string.h>#define N 505int match[N],map[N][N];int cn,mn;bool used[N];int find(int x){ for(int i=
阅读全文
文章分类 - 网络流+二分匹配
摘要:这题跟1422原本以为一样求最短路径覆盖,后来知道,最短路径覆盖是每个点只能走一次,但是这个题目是可以走多次?我反复想就是不明白为什么??后来看了一个图明白了比如直接求最短路径覆盖的话,上图情况如果求出1-2匹配,2-4匹配,那么3-2-5这条路径就已经被切断不存在了,因为2不能再走了实际上2还是可以走的。按照上图,答案是5-最大匹配=5-2=3,实际上答案是2因此这个题用floyd先求一次闭包,再次求解就行了。#include <stdio.h>#include <string.h>#define N 301int match[N],map[N][N];int cn,
阅读全文
摘要:给出几个交叉路口以及路口之间的道路,求出最少的路径数可以覆盖到所有的点....由定理可知道,最少路径覆盖数=n-最大匹配数直接套匈牙利模版,直接水过.#include <stdio.h>#include <string.h>#define N 301int match[N],map[N][N];int cn,mn;bool used[N];int find(int x){ for(int i=1;i<=cn;i++) if(!used[i]&&map[x][i]) { used[i]=true; if(match[i]==-1||find(matc
阅读全文
摘要:题目要求,一个任务可以由两台机器的各一种模式完成,每种机器的同时只能在一种模式下切换,并且每次切换都需要重启机器!合理安排任务的序列,问最后最少需要重启几次我们可以建图,把两个机器的每种模式看作是点,任务是边,连接两台机器上的可以执行的模式,要求的就是用最少的点可以覆盖所有的边,即最小覆盖。由定理得知,最小覆盖=最大匹配数,然后用匈牙利算法求出最大匹配数即可. 1 #include <stdio.h> 2 #include <string.h> 3 #define N 201 4 int match[N],map[N][N]; 5 int cn,mn,k; 6 bool
阅读全文
摘要:给出牛,饮料还有食物的数量,每头牛给出喜欢的饮料和食物,最后求出能够满足的牛的数量看别人的算法,把牛分解成两个点,然后按照 饮料-牛1-牛1-食物的对应关系进行计算最大网络流,这样形成了多源点多汇点的最大流如果这个点不分解的话,为什么不行?纠结...后来想明白了,如果不把牛拆开的话,多个饮料会对应到一头牛上,并且这头牛如果再对应到另外的食物的话,也可算是增广路,但是已经不符合条件了所以把牛拆开加一条1的路,可以限制每头牛只能对应一个饮料先放上代码,回头思考#include <cstdio>#include <cstdlib>#include <iostream&g
阅读全文
摘要:题目给出几个牛相应的生产机器,一个牛只能对应一个机器,一个机器只能对应一头牛。最多匹配多少头牛?简单的最大匹配,匈牙利算法直接过,但是网络流也可以解决此类问题,把每个边的cap容量设置成1,把0节点设置成初始节点,并且和牛都有边结尾点设置成m+n+1,和机器都有边,这样可构建一个网络流的图如图,把此问题建图,然后用EK网络流算法得出#include <cstdio>#include <cstdlib>#include <iostream>#include <string.h>#include <queue>#include <l
阅读全文
摘要:网络流的简单应用,求源点到终点的最大网络流用EK算法#include <cstdio>#include <cstdlib>#include <iostream>#include <string.h>#include <queue>#include <limits.h>#define MAX 250using namespace std;int cap[MAX][MAX];int m;int EKarp(int s,int t){ queue<int> Q; int flow[MAX][MAX],a[MAX],u
阅读全文
摘要:给出两组男女小朋友,期中男的和女的个子都互相认识,然后再给出几组男女之间认识的组,问最后求出最大的互相都认识的人数经典的最大团问题,求二分图的最大完全图=补图的最大孤立团=N-补图的最大二分匹配最小路径覆盖。有向图最小路径覆盖=|V| - 最大匹配数; 无向图最小路径覆盖=|V| - 最大匹配数/2。给你顶点和顶点,求最少的转载一个解题报告,比较详细的] 1 #include <stdio.h> 2 #include <string.h> 3 #define N 202 4 int gn,bn; 5 int match[N],map[N][N]; 6 bool used
阅读全文