题意即求一个最小顶点覆盖。

对于没有孤立点的图G=(V,E),最大独立集+最小顶点覆盖= V。(往最大独立集加点)

问题可以变成求树上的最大独立集合。

每个结点的选择和其父节点选不选有关,

dp(u,1)表示父节点选,这时u不可选,

dp(u,0)表示父节点不选,这时u可选可不选。

#include<bits/stdc++.h>
using namespace std; const int maxn = ;
int meo[maxn][];
int vis[maxn][], clk;
int hd[maxn],nx[maxn<<],to[maxn<<],ec; void add(int u,int v)
{
to[ec] = v;
nx[ec] = hd[u];
hd[u] = ec++;
} int dp(int u,int a = ,int f = -)//a表示父节点选不选
{
if(vis[u][a] == clk) return meo[u][a];
vis[u][a] = clk;
int &re = meo[u][a];
re = ;
int pick = ;
for(int i = hd[u]; ~i; i = nx[i]){
int v = to[i];
if(v == f) continue;
if(!a){
pick += dp(v,,u);
}
re += dp(v,,u);
}
if(!a) re = max(re,pick);
return re;
} //#define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
int n;
while(~scanf("%d",&n)){
memset(hd,-,sizeof(hd)); ec = ;
for(int i = ; i < n; i++){
int u,sn; scanf("%d:(%d)",&u,&sn);
while(sn--){
int v;scanf("%d",&v);
add(u,v); add(v,u);
}
}
clk++;
printf("%d\n",n-dp());
}
return ;
}

最小点覆盖还可以用二分匹配来做

关键代码,下面可以适合无向图,如果用有向图的算法一个匹配会算两次。

int link[maxn];
int vis[maxn], clk; bool aug(int u)
{
if(vis[u] == clk) return false;
vis[u] = clk;
for(int i = hd[u]; ~i; i = nx[i]){
int v = to[i];
if(!~link[v] || aug(link[v])){
link[v] = u;
link[u] = v;
return true;
}
}
return false;
} int Hungary(int n)
{
memset(link,-,sizeof(link));
int ans = ;
for(int i = ; i < n; i++){
if(link[i]<){
clk++;
if(aug(i)) ans++;
}
}
return ans;
}

也可以直接dp求最小点覆盖集合,

f[u][p]表示以u为根的树最小点覆盖,p表示选不选u。

当选u的时候,子结点可选可不选,

当不选u的时候,子结点都选。

(实际上存在在某些结点只选一个子节点的最优解的情况,但是这样做并不会丢解)

int f[maxn][],vis[maxn],clk;

void dfs(int u = ,int fa = -)
{
vis[u] = clk;
f[u][] = ; f[u][] = ;
for(int i = hd[u]; ~i; i = nx[i]){
int v = to[i];
if(v == fa) continue;
if(vis[v] != clk) dfs(v,u);
f[u][] += min(f[v][],f[v][]);
f[u][] += f[v][];
}
}

LA 2038 Strategic game(最小点覆盖,树形dp,二分匹配)的更多相关文章

  1. HDU 1054 Strategic Game(最小点覆盖+树形dp)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106048#problem/B 题意:给出一些点相连,找出最小的点数覆盖所有的 ...

  2. HDU - 1054 Strategic Game(二分图最小点覆盖/树形dp)

    d.一颗树,选最少的点覆盖所有边 s. 1.可以转成二分图的最小点覆盖来做.不过转换后要把匹配数除以2,这个待细看. 2.也可以用树形dp c.匈牙利算法(邻接表,用vector实现): /* 用ST ...

  3. 两种解法-树形dp+二分+单调队列(或RMQ)-hdu-4123-Bob’s Race

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 题目大意: 给一棵树,n个节点,每条边有个权值,从每个点i出发有个不经过自己走过的点的最远距离 ...

  4. HDU1054 Strategic Game —— 最小点覆盖 or 树形DP

    题目链接:https://vjudge.net/problem/HDU-1054 Strategic Game Time Limit: 20000/10000 MS (Java/Others)     ...

  5. POJ1463 Strategic game (最小点覆盖 or 树dp)

    题目链接:http://poj.org/problem?id=1463 给你一棵树形图,问最少多少个点覆盖所有的边. 可以用树形dp做,任选一点,自底向上回溯更新. dp[i][0] 表示不选i点 覆 ...

  6. Strategic game(POJ 1463 树形DP)

    Strategic game Time Limit: 2000MS   Memory Limit: 10000K Total Submissions: 7490   Accepted: 3483 De ...

  7. HDU 1054 Strategic Game 最小点覆盖

     最小点覆盖概念:选取最小的点数覆盖二分图中的所有边. 最小点覆盖 = 最大匹配数. 证明:首先假设我们求的最大匹配数为m,那么最小点覆盖必然 >= m,因为仅仅是这m条边就至少需要m个点.然后 ...

  8. HDU 1054 Strategic Game (最小点覆盖)【二分图匹配】

    <题目链接> 题目大意:鲍勃喜欢玩电脑游戏,特别是战略游戏,但有时他无法找到解决方案,速度不够快,那么他很伤心.现在,他有以下的问题.他必须捍卫一个中世纪的城市,形成了树的道路.他把战士的 ...

  9. hdu 3586 Information Disturbing(树形dp + 二分)

    本文出自   http://blog.csdn.net/shuangde800 题目链接:   hdu-3586 题意 给一棵n个节点的树,节点编号为1-n,根节点为1.每条边有权值,砍掉一条边要花费 ...

随机推荐

  1. java部分基础知识整理----百度脑图版

    近期发现,通过百度脑图可以很好的归纳总结和整理知识点,本着学习和复习的目的,梳理了一下java部分的知识点,不定期更新,若有不恰之处,请指正,谢谢! 脑图链接如下:java部分基础知识整理----百度 ...

  2. 洛谷P3819 松江1843路

    P3819 松江1843路 题目描述 涞坊路是一条长L米的道路,道路上的坐标范围从0到L,路上有N座房子,第i座房子建在坐标为x[i]的地方,其中住了r[i]人. 松江1843路公交车要在这条路上建一 ...

  3. 洛谷P1275 魔板

    P1275 魔板 题目描述 有这样一种魔板:它是一个长方形的面板,被划分成n行m列的n*m个方格.每个方格内有一个小灯泡,灯泡的状态有两种(亮或暗).我们可以通过若干操作使魔板从一个状态改变为另一个状 ...

  4. IDEA的database插件无法链接mysql的解决办法(08001错误)

    1.问题 首先先说问题,用navicat链接数据库正常,mysql控制台操作正常,但是用IDEA的数据库插件链接一直报 08001 错误,具体见下图: 错误:Connection to eshop@l ...

  5. Flutter SDK的下载与安装步骤 (mac版)

    本月初(应该是2018年12月4日),Google在其Flutter Live 2018大会上正式发布 Flutter 1.0 版本. 当然我们不会怀疑Google团队的技术实力,但它和React N ...

  6. [USACO09OCT]热浪Heat Wave Dijkstra

    题目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for g ...

  7. Github搭建个人博客

    Github的搭建博客真的是非常容易,所需的步骤只有三个:要完成自己的github.io博客网站,总共分三步:开通自己的github.io repo,选择一款Jekyll的主题,编写并发布博客.下面将 ...

  8. codeforces round 474 pathwalks

    题目传送门http://codeforces.com/contest/960/problem/F 4月25号期中考,答应过年级组长要考年排前3的,所以25号以前我就不搞竞赛了,期中考要考好. 有很多大 ...

  9. Duff and Meat(贪心)

    Duff is addicted to meat! Malek wants to keep her happy for n days. In order to be happy in i-th day ...

  10. sql 更新 批量更新 更新得到主键

    import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.jdbc.c ...