支配集的支配集原理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了支配集的支配集原理相关的知识,希望对你有一定的参考价值。
参考技术AD是图G=<V,E>的一个顶点子集,对于G的任一顶点v,要么v属于D,要么与D中的一个顶点相邻,则D称为图G的一个支配集。若在D集中去掉任何元素后D不再是支配集,则称D是极小支配集。称图G的所有支配集中顶点个数最少的支配集为最小支配集,最小支配集中的顶点个数称为图G的支配数。
如何求G的所有极小支配集合?
对符号X,Y,Z,定义两种运算X+Y(加法运算,或运算)和XY(乘法运算,与运算),满足以下运算定律:
交换律:X+Y = Y+X; XY = YX
结合律:(X+Y)+Z = X+(Y+Z); (XY)Z = X(YZ)
分配律:X(Y+Z) = XY+XZ
吸收律:X+X = X; XX = X; X+XY = X
求所有极小支配集的公式:
一个顶点与它相邻的所有顶点进行加法运算组成一个因子项,n个因子项再相乘。连乘过程中根据上述运算规律展开成积之和的形式。每一积项给出一个极小支配集。
(1 + 2 + 3 + 4)(2 + 1 + 4)(3 + 1 + 4)(4 + 1 + 2 + 3 + 5 + 6)(5 + 4 + 6)(6 + 4 + 5)
=15 + 16 + 4 + 235 + 236
故极小支配集为
V1, V5, V1, V6, V4, V2, V3, V5, V2, V3, V6
树的最小支配集
/**
最小支配集,就是图中用最少的点覆盖其它所有点
如果用选A点覆盖,则与A点相连的点都被覆盖,大致
就是这样
百度里面搜到一道题
有一个图G,现在希望在一些点建立控制站,每个控制站能控制与它相临的点(直接相连),
现在希望有选择的在一些点建立控制站,使得以最小得控制站数,控制所有的点
图的最小支配集是NP 问题,我只会树的最小支配集模板,就是
图G 是树形结构
判断树的最小支配集,条件如下
1、选一结点为根后序遍历
2、遍历过程中,如果该结点没被覆盖,该结点的父亲结点没被覆盖,且
该结点的子结点中没有被覆盖的,则该结点的父亲结点即为一覆盖点
就上面两个条件即可实现,证明不会,自己画画就能懂
现在用vector 存边来写下
#include <vector>
vector<int> adj[M];
bool vis[M], over[M];
int ans;
//初始化: vis, over, ans = 0
//调用dfs(1, 1), 选 1 为根节点
void dfs(int u, int fa)
//根节点判断可省去判断父亲结点
vis[u] = 1;
bool flag = false;
for (int i=0; i<adj[u].size(); i++)
int v = adj[u][i];
if (!vis[v])
dfs(v, u);
flag = flag || over[v];
if (!over[fa] && !flag && !over[u])
//父亲结点没覆盖,没子结点覆盖,本身没覆盖,3个条件
over[fa] = 1;
ans++;
ans即为最小支配集得个数,over[x] 表示x点被覆盖
POJ 3659
*/
收藏于 2012-01-20
来自于百度空间
以上是关于支配集的支配集原理的主要内容,如果未能解决你的问题,请参考以下文章