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 ...
随机推荐
- Silverlight编程模型
Silverlight支持Javascript API编程模型和托管API编程模型这两种编程模型,它们的基本作用都是用于XAML界面文件中的XAML对象,基于托管API编程的XAML应用程序是通过x: ...
- js java正则表达式替换手机号4-7位为星*号
需求: 一个手机号13152461111,由于安全性,需要替换4-7位字符串为星号,为131****1111,那么有2中玩法,一种是前端隐藏,一种是后台隐藏. 1. 前台隐藏 <!DOCTYPE ...
- .NET设计模式(3):抽象工厂模式(Abstract Factory)(转)
概述 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作:同时由于需求的变化,往往存在着更多系列对象的创建工作.如何应对这种变化?如何绕过常规的对象的创建方法(new),提供一种“封装机制”来 ...
- TJU 4087. box
题目:Tuhao and his two small partners participated in the tournament.But in the end, they lost the cha ...
- GCD常用方法
1.延迟操作 2.一次性代码 3.队列组 /** * 延迟执行 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC ...
- JMeter性能测试介绍学习一
上一节中,我们了解了jmeter的一此主要元件,那么这些元件如何使用到性能测试中呢.这一节创建一个简单的测试计划来使用这些元件.该计划对应的测试需求. 1)测试目标网站是fnng.cnblogs.co ...
- mvc5 错误页如何定义
项目根目录下的Web.config <system.web> <customErrors mode="On" defaultRedirect="~/Er ...
- java 如何从配置文件(.properties)中读取内容
1.如何创建.properties文件 很简单,建立一个txt文件,并把后缀改成.properties即可 2.将.properties文件拷入src的根目录下 3..properties文件内容格式 ...
- E文阅读
Lesson 9 A cold welcome 冷遇 What does 'a cold welcome' refer to?On Wednesday evening, we went to the ...
- python爬煎蛋妹子图
# python3 # jiandan meizi tu import urllib import urllib.request as req import os import time import ...