hdu1054(二分图匹配)
题意很简单,在一颗树上找最小点覆盖。
将树染成黑白两色,构成一张二分图,然后最大匹配==最小点覆盖即可,所以一次匈牙利就可以求出来了
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <string>
#include <queue>
#include <vector>
#include <stdlib.h>
using namespace std;
#define N 1505 int n;
struct node
{
int to,next;
}edge[N*]; vector<int>g[N]; int pre[N],cnt;
int cao[N],a[N],b[N];
int cnta,cntb;
int mark[N],frt[N]; void add_edge(int u,int v)
{
edge[cnt].to=v;
edge[cnt].next=pre[u];
pre[u]=cnt++;
} void Dfs(int s,int fr,int flag)
{
if(flag==)
{
cao[s]=cnta;
a[cnta]=s;
cnta++;
}else
{
cao[s]=cntb;
b[cntb]=s;
cntb++;
}
for(int p=pre[s];p!=-;p=edge[p].next)
{
int v=edge[p].to;
if(v==fr) continue;
Dfs(v,s,flag^);
}
} int dfs(int s)
{
for(int i=;i<g[s].size();i++)
{
int v=g[s][i];
if(mark[v]==) continue;
mark[v]=;
if(frt[v]==-||dfs(frt[v]))
{
frt[v]=s;
return ;
}
}
return ;
} int main()
{
while(scanf("%d",&n)!=EOF)
{
cnt=;
memset(pre,-,sizeof(pre));
for(int i=;i<n;i++)
{
int x;
scanf("%d",&x);
int num;
scanf(":(%d)",&num);
for(int j=;j<num;j++)
{
int y;
scanf("%d",&y);
add_edge(x,y);
add_edge(y,x);
}
}
//然后就是染色了
cnta=; cntb=;
Dfs(,-,);
//然后再建一张图
for(int i=;i<cnta;i++)
{
g[i].clear();
for(int p=pre[a[i]];p!=-;p=edge[p].next)
{
int v=edge[p].to;
g[i].push_back(cao[v]);
}
}
int ans=;
memset(frt,-,sizeof(frt));
for(int i=;i<cnta;i++)
{
memset(mark,,sizeof(mark));
ans+=dfs(i);
}
printf("%d\n",ans);
}
return ;
}
hdu1054(二分图匹配)的更多相关文章
- UVA 12549 - 二分图匹配
题意:给定一个Y行X列的网格,网格种有重要位置和障碍物.要求用最少的机器人看守所有重要的位置,每个机器人放在一个格子里,面朝上下左右四个方向之一发出激光直到射到障碍物为止,沿途都是看守范围.机器人不会 ...
- POJ 1274 裸二分图匹配
题意:每头奶牛都只愿意在她们喜欢的那些牛栏中产奶,告诉每头奶牛愿意产奶的牛棚编号,求出最多能分配到的牛栏的数量. 分析:直接二分图匹配: #include<stdio.h> #includ ...
- BZOJ1433 ZJOI2009 假期的宿舍 二分图匹配
1433: [ZJOI2009]假期的宿舍 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2375 Solved: 1005[Submit][Sta ...
- HDU1281-棋盘游戏-二分图匹配
先跑一个二分图匹配,然后一一删去匹配上的边,看能不能达到最大匹配数,不能这条边就是重要边 /*----------------------------------------------------- ...
- HDU 1083 网络流之二分图匹配
http://acm.hdu.edu.cn/showproblem.php?pid=1083 二分图匹配用得很多 这道题只需要简化的二分匹配 #include<iostream> #inc ...
- hdu 5727 Necklace dfs+二分图匹配
Necklace/center> 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5727 Description SJX has 2*N mag ...
- BZOJ 1059 & 二分图匹配
题意: 判断一个黑白染色的棋盘能否通过交换行或列使对角线上都是黑色. SOL: 真是有点醉...这种问题要么很神要么很水...第一眼感觉很水但就是不造怎么做...想了10分钟怎么感觉就是判断个数够不够 ...
- 【POJ 3020】Antenna Placement(二分图匹配)
相当于用1*2的板覆盖给定的h*w的格子里的点,求最少的板.可以把格子相邻的分成两个集合,如下图,0为一个集合,1的为一个,也就是(行数+列数)为奇数的是一个集合,为偶数的为另一个集合.1010101 ...
- BZOJ-1143&&BZOJ-2718 祭祀river&&毕业旅行 最长反链(Floyed传递闭包+二分图匹配)
蛋蛋安利的双倍经验题 1143: [CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1901 Solved: 951 ...
随机推荐
- 深入理解javacript之prototype
对于javascript这样一种前端语言,个人觉得,要真正的理解其oop, 就必须要彻底搞清楚javascript的对象,原型链,作用域,闭包,以及this所引用的对象等概念.这些对弄明白了,应该就可 ...
- Sqli-labs less 34
Less-34 本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理.由上面的例子可以看到我们的方法就是将过滤函数添加的 \ 给吃掉.而get型的方式我们是以url形式提交 ...
- 远程数据源Combobox
Ext.define('bookInfo', { extend: 'Ext.data.Model',//新类继承自model fields: [{ name: 'b ...
- HDU 4569 Special equations(数学推论)
题目 //想不出来,看了解题报告 /* 题意:给你一个最高幂为4的一元多项式,让你求出一个x使其结果模p*p为0. 题解:f(x)%(p*p)=0那么一定有f(x)%p=0,f(x)%p=0那么一定有 ...
- POJ 1961 2406 (KMP,最小循环节,循环周期)
关于KMP的最短循环节.循环周期,请戳: http://www.cnblogs.com/chenxiwenruo/p/3546457.html (KMP模板,最小循环节) POJ 2406 Powe ...
- 二维码(支持arc,苹果自带扫描,zbar扫描,二维码生成)
下载地址:http://pan.baidu.com/s/1mgvJzyo
- POJ 1658
#include<iostream>//cheng da cai zi using namespace std; int main() { int i; int time; ]; cin& ...
- Es使用。
http://jingyan.baidu.com/article/3052f5a1e8a06397f31f8699.html --------------------------- http://el ...
- iftop 使用
测试中常常发现服务器网卡打满,那么这些流量具体占用情况如何呢? 这个时候我们要使用iftop来看看,首先我们要安装: 一. 安装 首先安装libpcap,下载链接:http://www.tcpdump ...
- linux下文件编码的查看与修改
在Linux中查看文件编码可以通过vim编辑器来查看,在vim命令模式下输入如下命令即可: :set fileencoding //在vim中查看文件编码 如果你只是想查看其它编码格式的文件或者想解决 ...