摘要:
Just a note because of a failure understand for the Path Cover 以下内容均来自:http://en.wikipedia.org/wiki/Path_cover 对于有向图 G Belong (V,E), 一个路径覆盖就是:一个由多条有向路径组成的集合,并且每一个顶点 v Belong V, 其至少(同时也至多)属于一条路径. 注意,一个路径覆盖可能包含路径长度为0的情况.(单个顶点时). 路径覆盖也能够定义为: 一个不相交的路径覆盖. 一个由多条路径组成的集合,每一个顶点 v Belong V 都准确的属于一条路径. ... 阅读全文
摘要:
题意 N个人,其中包含男女,然后某些男女之间有关系。现要求找出最大的K人,其之间两两无关系。解题思路 最大独立子集问题。 题意是求最大独立集,但是N太大(其实也不大,就是数据好强,KB算法T了), 因为男女生有边,男男或者女女之间不会有边,所以理论上将男女分开,然后就形成二分图了. 但是,男女情况不明....我是将N个看成一个集合,与其自身匹配. 拆点将N个人看成 集合A{N},与集合B{N},然后求最大匹配, 结果即为最大独立集 : N - 最大匹配/2#include<stdio.h>#include<stdlib.h>#include<string.h> 阅读全文
摘要:
---恢复内容开始---题意 N*N的土地,某些点被挖成池塘了,其余为空地, 现在要组织成1*2的空地出售,问最大能出售的数量。解题思路 因为 R*C - K <= 50 意味着,去除掉池塘后最多只有50个空地 每个顶点与其上下左右的空地 连接,然后 构成二分图。 转换成求最大独立边(任意两条边不共用相同顶点)即为最大匹配。#include<stdio.h>#include<stdlib.h>#include<string.h>const int N = 110;int r, c, n, m, k;bool g[N][N], use[N][N];int 阅读全文
摘要:
题意 P个课程,N个学生,之间有边连接,问是否可以 P个学生选择不同的P个课程。解题思路 最大匹配#include<stdio.h>#include<stdlib.h>#include<string.h>const int N = 310;int p, n;bool g[110][310];int ma[N], mb[N];bool vis[N];int path( int u ){ for(int v = 1; v <= n; v++){ if( g[u][v] && !vis[v] ){ vis[v] = 1; if( m... 阅读全文
摘要:
题意 两个机器A,B, 分别有 N,M个工作模式, K个作业,可以在( Ai, Bj ) 模式下工作. 机器最初在模式0下.问最小的 切换模式次数.解题思路 A, B 两个天然二分图顶点集合, A,B机器上的两个模式之间连边即为 作业K. 最小的切换次数, 即为 最小顶点覆盖数. 特殊的定理是, 二分图中 最小顶点覆盖 = 最大匹配. (仅仅在二分图中满足. 主要是由于最大独立点集导致)#include<stdio.h>#include<string.h>#include<stdlib.h>const int N = 110;int n, m, k;int 阅读全文
摘要:
题意, N*N 矩阵, 有些地方有行星, 现有一种武器能够攻击一行, 或者一列,问最少攻击次数.消灭所有行星解法. 因为要消灭所有顶点, 同一行中的顶点能 一次 消灭, 同一列的顶点也能 一次 消灭. 我们需要 最小的 攻击次数, 则意味着 最小的攻击次数消灭 所有顶点. 将所有存在行星的顶点(x,y), 按x, y轴分别作为 A,B顶点集合,转换成二分图. 这样 A,B集合连边的代表一次 攻击 箭支 能消灭的行星, 则题目所求就转换成了. 最小的顶点 覆盖所有边, 既 最小顶点覆盖 问题. 又因为, ( 在所有图中都满足) 最小顶点覆盖 + 最大独立子集 = 顶点数... 阅读全文