hdu2444(判二分图+最大匹配)
2024-08-25 07:08:41
传送门:The Accomodation of Students
题意:有n个学生,m对相互认识的,问能否分成两队,使得每对中没有相互认识的,如果可以求最大匹配,否则输出No。
分析:判断二分图用染色法,然后直接匈牙利算法求最大匹配。
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 100000000
#define inf 0x3f3f3f3f
#define eps 1e-6
#define N 210
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define PII pair<int,int>
using namespace std;
int vis[N],match[N],color[N];
vector<int>g[N];
int dfs(int u)
{
for(int i=,sz=g[u].size(); i<sz; i++)
{
int v=g[u][i];
if(!vis[v])
{
vis[v]=;
if(match[v]==-||dfs(match[v]))
{
match[v]=u;
return ;
}
} }
return ;
}
int judge(int u,int fa,int state)
{
color[u]=state;
for(int i=,sz=g[u].size(); i<sz; i++)
{
int v=g[u][i];
if(v==fa)continue;
if(color[v]&&color[u]==color[v])return ;
else if(!color[v]&&!judge(v,u,-state))return ;
}
return ;
}
int main()
{
int n,m,u,v;
while(scanf("%d%d",&n,&m)>)
{
FILL(g,);
FILL(match,-);
for(int i=;i<=n;i++)g[i].clear();
for(int i=; i<=m; i++)
{
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
FILL(color,);
bool flag=true;
for(int i=; i<=n; i++)
if(!color[i]&&g[i].size()>)
{
if(!judge(i,i,))
{
flag=false;
break;
}
}
if(!flag)
{
puts("No");
continue;
}
int ans=;
for(int i=; i<=n; i++)
{
FILL(vis,);
if(dfs(i))ans++;
}
printf("%d\n",ans/);
}
}
最新文章
- VirtualBox 内的 Ubuntu Server 虚拟机网络配置
- 用groovy采集网页数据
- [原创]java WEB学习笔记86:Hibernate学习之路-- -映射 n-n 关系,单向n-n,双向n-n
- winform属性
- 获取手机 id 与 ip
- python基础入门教程《python入门经典》
- 深入浅析JavaScript中的constructor
- js 移动端识别手机号码
- zzw原创_ipv6下环境配置防火墙及FTP处理一例
- [SHOI2014]概率充电器(概率+换根dp)
- 点火开关分为4个档位,分别是off,acc,IG-on,和ST
- touch-action属性引起的探索
- hdu4419
- 【题解】Luogu P4679 [ZJOI2011]道馆之战
- 32.纯 CSS 创作六边形按钮特效
- 使用 IntraWeb (14) - 基本控件之 TIWHRule、TIWRectangle
- BZOJ3879: SvT【后缀数组+单调栈】
- Zabbix 报警通知邮件和微信vim /etc/hosts
- 【笔记】metasploit渗透测试魔鬼训练营-信息搜集
- cocostudio 在VS模拟器中加载资源显示混乱问题
热门文章
- SqlServer和Oracle中一些常用的sql语句7 游标
- android第一天-------环境搭建
- SharePoint2010 部署步骤“激活功能”中出现错误:无法启动计算机“PCName”上的服务SPUserCodeV4
- h和.cpp文件的区别
- mui如何增加自定义字体icon图标
- mysql 结果集合切换
- 使用hadoop ecipse插件须要注意的问题
- 【ASP.NET Web API教程】3 Web API客户端
- Swift - 使用storyboard创建表格视图(TableViewController)
- 打印org.eclipse.xsd.XSDSchema对象