点击打开题目链接

最小点覆盖=最大二分匹配的 (单向图) ;

最小点覆盖=最大二分匹配的一半 (双向图) ;

证明

所以我们只需求最大匹配,用 匈牙利算法 求出最大匹配,除以二得到答案

具体算法都已经给出相关链接;下面给出自己AC 代码

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string>
#include<string.h>
#include<stdlib.h> using namespace std;
typedef long long int LL;
const int MAXSIZE=10000; struct Edge
{
int s,t;
};
Edge edge[MAXSIZE];
int first[MAXSIZE],nexts[MAXSIZE];
int link[MAXSIZE];
bool vis[MAXSIZE];
int tot; void init()
{
memset(first,-1,sizeof(first));
memset(link,-1,sizeof(link));
tot=0;
}
void addedge(int s,int t)
{
edge[tot].s=s,edge[tot].t=t;
nexts[tot]=first[s];
first[s]=tot;
tot++;
}
int dfs(int now)
{
for(int i=first[now];i!=-1;i=nexts[i])
{
int to=edge[i].t;
if(!vis[to])
{
vis[to]=true;
if(link[to]==-1||dfs(link[to]))
{
link[to]=now;
return 1;
}
}
}
return 0;
}
int max_match(int n)
{
int ans=0;
for(int i=0;i<n;i++)
{
memset(vis,0,sizeof(vis));
ans+=dfs(i);
}
return ans;
}
int main()
{
int n;
while(scanf("%d",&n)+1)
{
init();
for(int i=0;i<n;i++)
{
int t1,t2;
scanf("%d:(%d)",&t1,&t2);
while(t2--)
{
int num;
scanf("%d",&num);
addedge(t1,num);
addedge(num,t1);
}
}
printf("%d\n",max_match(n)>>1);
}
return 0;
}

最小点覆盖 hdu--1054的更多相关文章

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

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

  2. hdu 1054 最小点覆盖

    Sample Input 4 0:(1) 1 1:(2) 2 3 2:(0) 3:(0) 5 3:(3) 1 4 2 1:(1) 0 2:(0) 0:(0) 4:(0)   Sample Output ...

  3. HDU 1054 Strategic Game 最小点覆盖

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

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

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

  5. hdu 1054(最小点覆盖集)

    Strategic Game Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. HDU 1054 Strategic Game(最小路径覆盖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 题目大意:给你一棵树,选取树上最少的节点使得可以覆盖整棵树. 解题思路: 首先树肯定是二分图,因 ...

  7. HDU 1150 Machine Schedule (二分图最小点覆盖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1150 有两个机器a和b,分别有n个模式和m个模式.下面有k个任务,每个任务需要a的一个模式或者b的一个 ...

  8. HDU 1498 50 years, 50 colors(最小点覆盖,坑称号)

    50 years, 50 colors Problem Description On Octorber 21st, HDU 50-year-celebration, 50-color balloons ...

  9. hdu 1498(最小点覆盖集)

    50 years, 50 colors Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  10. hdu 2236(二分图最小点覆盖+二分)

    无题II Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

随机推荐

  1. Class definition

    Prerequisite Articles (None) Related Articles Category Accessor method A class definition is the spe ...

  2. 老毛桃winpe优盘启动系统个性修改全攻略

    PE优盘系统也有很多:大白菜.老毛桃.深度.通用PE工具箱.U大师.电脑店……这些PE优盘系统大多都会捆绑软件安装.更改主页等,一不小心,你就中招.虽然有些是可以自己去取消,但是启动画面还是带有各种L ...

  3. git extensions远程配置

    http://blog.csdn.net/pgmsoul/article/details/7860393 远程地址是如下格式:git@github.com:yaoname/project.git 保存 ...

  4. Solidworks安装完成提示failed to load slderresu.dll怎么办

    安装完成出现下面的一系列错误提示   进入到语言包,重新安装中文语言包即可   可以正常打开和运行了                  

  5. ajax加载时的进度条

    运行效果如下图,pc和移动都可以展示,调用方法很简单,开始调用:loading.baosight.showPageLoadingMsg(false),false代表不现实加载说明,true展示加载说明 ...

  6. codeforces 557 C

    由于期末.非常久没刷题了,CF一直掉-- 这个题事实上非常简单. .由于做法非常easy想到嘛.. 就是枚举max=x时,最大能保留多少价值.不断更新ans, 结果就是全部价值和减去ans就好 因为最 ...

  7. Ubuntu16.04 下docker部署web项目

    概念性的请戳 第一步:更新apt-get update 第二步:安装环境 apt-get install \ apt-transport-https \ ca-certificates \ curl ...

  8. kubernetes之创建基于名称空间的内存和cpu限额示例

    系列目录 首先我们创建一个名称空间 kubectl create namespace quota-mem-cpu-example 创建资源配额 apiVersion: v1 kind: Resourc ...

  9. Linux中进程的优先级

    Linux採用两种不同的优先级范围,一种是nice值.还有一种是实时优先级. 1.nice值 nice值得范围是-20~19,默认值是0. 越大的nice值意味着更低的优先级.也就是说nice值为-2 ...

  10. MongoDB 征途

    到目前为止,对数据库这块仍然捉襟见肘,仅限于懂一些MySQL,就更谈不上什么优化了. 细想来,还是没有项目驱动造成的...既然跟关系型数据库缘分未到,干脆直接go to NoSQL - MongoDB ...