Kruskal比Prim简单的多,对已知边排序,然后从排序的边中跳出N-1条最短的来就可以了,当然,如果在挑的过程中出现环,就丢掉继续找,就只这么直接。如何判定有没有环?很简单,用并查集就可以。比如a-b,b-c,c-a构成了环,那么a-b合并,b-c合并后,如果紧接着最小边是c-a,那么并查集的f...
分类:
其他好文 时间:
2015-04-12 10:38:31
阅读次数:
122
题目大意:
有2^N个奶酪,编号从000…00到111…11,现在有台机器有N个开关,每个开关的状态有3个,
分别是'0'、'1'、'*',每个开关只能有一个状态存在。'*'状态可以替代'0'或'1'状态。比如11*1,
对应为1111或1101。现在有M个奶酪被感染了,每个奶酪的编号为长度为N的二进制字符串。
和开关一样,每一位上除了能为'1'、'0'之外,还可以是'*',表示既能是'0',也能是'1'。比如说
1*1,既可以是101,也可以是111。现在要把这些被感染的奶酪(二进制字符串)都删除掉。删除...
分类:
系统相关 时间:
2015-04-09 11:55:46
阅读次数:
172
题意:给出n个节点的图,求最大边减最小边尽量小的值的生成树首先将边排序,然后边的区间,判定在该区间内是否n个点连通,如果已经连通了,则构成一颗生成树,则此时的苗条度是这个区间内最小的(和kruskal一样,如果在已经构成一颗树的基础上,再继续加入边,由于边都是排过序的,再加入的边一定会更大)再维护一...
分类:
其他好文 时间:
2015-04-04 01:06:59
阅读次数:
152
题目大意:
在N*M的矩阵中,有K个城市要覆盖无线网。而一个无线网基站只能覆盖左右相邻或是上下相邻的两个
城市。问:至少放置多少个基站,能将这K个城市全部覆盖。输入数据时,'*'表示城市,'o'表示空地。
思路:
K个城市作为K个点,编号为1~K。如果有两个城市相邻,则两个城市之间建立一条双向边。现在问题
变为了怎么从图中选择最少的边,使得能够覆盖所有的点。可以用二分图最小边覆盖来做。首先遍历
原图,对K个城市编号,存入iMap[][]数组中。然后建立一个二分图,两边都为K个城市。如果两个城
市有边(即两...
分类:
其他好文 时间:
2015-04-03 11:20:01
阅读次数:
185
poj 3020 一般图最大匹配 带花树开花算法
题意:
给出一个h*w的图,每个点都是'o'或'*',最少要用多少个1*2的矩形才能把图中所有的'*'都覆盖掉。
限制:
1
思路:
最小边覆盖=|V|-最大匹配
一般图最大匹配,带花树开花算法
/*poj 3020 一般图最大匹配 带花树开花算法
题意:
给出一个h*w的图,每个点都是'o'或'*',最少...
分类:
编程语言 时间:
2015-03-31 09:19:59
阅读次数:
169
网络流中的一些基本概念
最大流:
最小割:
最大匹配:
最小顶点覆盖:求一个最小的点集S,使得G中任意边都有至少一个端点属于S。
最大独立集:求一个最大的点集,里面的点不存在任何的边相连。
最大团:求一个最大的点集,里面的点两两相连。
最小边覆盖:理解为边覆盖点,用最少的边把图中的点全部覆盖。
最小路径覆盖:用最少的路径把图中的所有点覆盖。
规则:
最大流=最小割
最...
分类:
其他好文 时间:
2015-03-30 21:09:27
阅读次数:
188
题目大意给出一些边,每个边有一个边权和颜色。现在要求出最小边权有need个白边的生成树。输出这个边权。思路在白边上加一个权值,这样就可以人为的改变白边出现在最小生成树。这个东西显然可以二分。之后取一下最小值就可以了。CODE#define _CRT_SECURE_NO_WARNINGS#include
#include
#include
#...
分类:
其他好文 时间:
2015-03-27 22:27:25
阅读次数:
136
//最小边覆盖
//最小边覆盖=最大独立集=n-最大匹配
//这个是在原图是二分图上进行的
//由于此题为无向图
//最小边覆盖=最大独立集=n-最大匹配/2;
#include
#include
#include
using namespace std;
const int maxn = 45*15;
int line[maxn][maxn];
int match[maxn...
分类:
其他好文 时间:
2015-03-21 23:00:49
阅读次数:
290
题目链接:点击打开链接
题意:
给定n个点的有向树
下面n-1行给出正向的边。
问:
修改尽可能小的边的方向,可以任选2个起点使得这两个点bfs能遍历完所有点。
思路:
枚举一条边,把树分成两部分,每次计算这两部分的最小花费。
那么这样就变成一个子树上的dp。
对于一棵树所需要修改的最小边方向的方法:
首先容易求出:dp[i]表示以i为根的子树,用i作为起点的花费.
我们选根...
分类:
其他好文 时间:
2015-03-11 17:12:51
阅读次数:
149
二分图的匈牙利算法二分图的难点主要在建图;关于二分图的几个重要公式: 最大匹配数=最小点覆盖 最小边覆盖=顶点总数-最大匹配数/2 (这个要拆点:uN=vN=cnt,ans=cnt-hungary/2) 最大团=补图最大独立集 最大独立集=顶点数-最大匹配匈牙利算法:int link[maxn...
分类:
编程语言 时间:
2015-03-11 16:55:29
阅读次数:
122