传送门: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/);
}
}

最新文章

  1. VirtualBox 内的 Ubuntu Server 虚拟机网络配置
  2. 用groovy采集网页数据
  3. [原创]java WEB学习笔记86:Hibernate学习之路-- -映射 n-n 关系,单向n-n,双向n-n
  4. winform属性
  5. 获取手机 id 与 ip
  6. python基础入门教程《python入门经典》
  7. 深入浅析JavaScript中的constructor
  8. js 移动端识别手机号码
  9. zzw原创_ipv6下环境配置防火墙及FTP处理一例
  10. [SHOI2014]概率充电器(概率+换根dp)
  11. 点火开关分为4个档位,分别是off,acc,IG-on,和ST
  12. touch-action属性引起的探索
  13. hdu4419
  14. 【题解】Luogu P4679 [ZJOI2011]道馆之战
  15. 32.纯 CSS 创作六边形按钮特效
  16. 使用 IntraWeb (14) - 基本控件之 TIWHRule、TIWRectangle
  17. BZOJ3879: SvT【后缀数组+单调栈】
  18. Zabbix 报警通知邮件和微信vim /etc/hosts
  19. 【笔记】metasploit渗透测试魔鬼训练营-信息搜集
  20. cocostudio 在VS模拟器中加载资源显示混乱问题

热门文章

  1. SqlServer和Oracle中一些常用的sql语句7 游标
  2. android第一天-------环境搭建
  3. SharePoint2010 部署步骤“激活功能”中出现错误:无法启动计算机“PCName”上的服务SPUserCodeV4
  4. h和.cpp文件的区别
  5. mui如何增加自定义字体icon图标
  6. mysql 结果集合切换
  7. 使用hadoop ecipse插件须要注意的问题
  8. 【ASP.NET Web API教程】3 Web API客户端
  9. Swift - 使用storyboard创建表格视图(TableViewController)
  10. 打印org.eclipse.xsd.XSDSchema对象