最小点覆盖 hdu--1054
最小点覆盖=最大二分匹配的 (单向图) ;
最小点覆盖=最大二分匹配的一半 (双向图) ;
所以我们只需求最大匹配,用 匈牙利算法 求出最大匹配,除以二得到答案
具体算法都已经给出相关链接;下面给出自己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的更多相关文章
- HDU - 1054 Strategic Game(二分图最小点覆盖/树形dp)
d.一颗树,选最少的点覆盖所有边 s. 1.可以转成二分图的最小点覆盖来做.不过转换后要把匹配数除以2,这个待细看. 2.也可以用树形dp c.匈牙利算法(邻接表,用vector实现): /* 用ST ...
- 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 ...
- HDU 1054 Strategic Game 最小点覆盖
最小点覆盖概念:选取最小的点数覆盖二分图中的所有边. 最小点覆盖 = 最大匹配数. 证明:首先假设我们求的最大匹配数为m,那么最小点覆盖必然 >= m,因为仅仅是这m条边就至少需要m个点.然后 ...
- HDU 1054 Strategic Game (最小点覆盖)【二分图匹配】
<题目链接> 题目大意:鲍勃喜欢玩电脑游戏,特别是战略游戏,但有时他无法找到解决方案,速度不够快,那么他很伤心.现在,他有以下的问题.他必须捍卫一个中世纪的城市,形成了树的道路.他把战士的 ...
- hdu 1054(最小点覆盖集)
Strategic Game Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- HDU 1054 Strategic Game(最小路径覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 题目大意:给你一棵树,选取树上最少的节点使得可以覆盖整棵树. 解题思路: 首先树肯定是二分图,因 ...
- HDU 1150 Machine Schedule (二分图最小点覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1150 有两个机器a和b,分别有n个模式和m个模式.下面有k个任务,每个任务需要a的一个模式或者b的一个 ...
- HDU 1498 50 years, 50 colors(最小点覆盖,坑称号)
50 years, 50 colors Problem Description On Octorber 21st, HDU 50-year-celebration, 50-color balloons ...
- hdu 1498(最小点覆盖集)
50 years, 50 colors Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 2236(二分图最小点覆盖+二分)
无题II Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- iOS应用崩溃日志揭秘
这篇文章还可以在这里找到 英语 Learn how to make sense of crash logs! 本文作者是 Soheil Moayedi Azarpour, 他是一名独立iOS开发者. ...
- Android Studio apk 打包流程(转)http://blog.chinaunix.net/uid-26000296-id-5567890.html
1.Build -> Generate Signed APK...,打开如下窗口 2.假设这里没有打过apk包,点击Create new,窗口如下 这里只要输入几个必要项 Key store p ...
- Leet Code OJ 338. Counting Bits [Difficulty: Medium]
题目: Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate ...
- odoo高级物流应用:跨厂区生产
业务情景 半成品在分厂生产,然后再在总厂组装 半成品所需的原材料存储在分厂的仓库 总厂需要的原材料储存在总厂的仓库 公用的原材料储存在总厂的仓库 解决方案 使用仓库间的供应 设置合适的Rout ...
- MRP routing设置释疑
Jeffer9@gmail.com 工艺是指在不同工作中心执行的作业序列 作业的详细信息 Number of cycles 在该工作中心操作几个循环 Number of ...
- HTML+CSS要点
1.td占据多行 / 列时,其挤开的 td 不写(但是包裹 td 的 tr 要写) 2. display:td 的元素中的文本默认垂直不居中(table中的td中的文本是垂直居中的) 3.th虽然定义 ...
- CentOSyum操作
查看已经安装yum: yum list installed|grep mysql 查看yum: yum list|grep mysql 更新yum: rpm -ivh mysql-community- ...
- Ubuntu 16.04下配置Golang开发环境
安装之前先要明白两个变量,后面介绍安装时,会用这两个变量 GOROOT , 这是go的工作目录,比如 /home/[替换为你的用户名]/go/work GOPATH , 这是go的安装目录, ...
- Cocos2d-X中提高性能的方法
1)内存使用效率: 使用大纹理 场景切换时,要尽量使用replaceScene 2)用好缓存: CCTextureCache(纹理缓存) CCSpriteFrameCache(精灵帧缓存) CC ...
- Mataplotlib事例操作
刚开始需要的文件是和前边的两个连载一起的