HDU5727 Necklace(二分图匹配)
Then M lines followed, every line contains two integers X,Y, indicates that magic gem X with Yang energy will become somber adjacent with the magic gem Y with Yin energy.
Sample Input Sample Output
题意:
有2n个珠子,分成阴阳两极,每极各n个。用这2n个珠子做成一个项链,使得相邻两个珠子的极性是不一样的,有一些阳性的珠子会被一些阴性的珠子所削弱,在它们它们相邻的情况下。
给你m个关系[x,y]表示阳性珠子x会被阴性珠子y在相邻情况下所削弱。问你最少有多少个阳性被削弱。
思路:
固定阳珠,然后对阴珠进行全排列,枚举每一种情况,对于一种排列, 给每一个位置对应的不会褪色的阳珠建边, 做出二维数组,跑出的最大匹配就是最多的不褪色阳珠子个数。我们通过匈牙利算法算出最大匹配sum,然后算出n-sum,对于每种排列取最小值就得到了我们想要的答案,注意特判下n=0的情况。
代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
#define MAX 0x3f3f3f3f int map[][];//map数组存的是阴阳珠是否消退,如果map[1][1]=1表示1号阳珠和1号阴珠能消退
int a[];//用来存储排列的方式
int g[][];//数组存的是排列后的阴阳珠能否消退 int linker[];//用来标记
int flag[];//用来标记 int n;//n对珠 bool dfs(int u)
{
for(int v=; v<=n; v++)
{
if(g[u][v]&&!flag[v])
{
flag[v]=true;
if(linker[v]==-||dfs(linker[v]))
{
linker[v]=u;
return true;
}
}
}
return false;
} int hungary()
{
int res=;
memset(linker,-,sizeof linker);
for(int u=; u<=n; u++)
{
memset(flag,false,sizeof(flag));
if(dfs(u))
res++;
}
return res;
} int main()
{
int m;
while(~scanf("%d%d",&n,&m))//有n对宝石,即n个阳,n个阴
{
if(n==)//如果0对,直接输出0
{
cout<<<<endl;
continue;
}
memset(map,,sizeof(map));//开始初始化为0,表示都不消退
for(int i=; i<=m; i++)
{
int a,b;
cin>>a>>b;
map[a][b]=;
}//更新map数组,能消退的标记为1
int ans=MAX;
for(int i=; i<=n; i++)
a[i]=i;//初始化a[i]数组为本身,一会用于全排列
do
{
for(int i=; i<=n; i++)//固定阳珠,阴珠全排列
{
for(int j=; j<=n; j++)
{
g[i][j]=;
//如果是第三个,则特判(因为是环形,所以第三个应该检查是否与第3个排列数的阳珠和第1个排列数的阳珠消退)
if(j==n)
{
//如果3号阳珠既不与第3个阴珠消退也不和第1个阴珠消退,标记为1,注意是排列之后的第一个和第三个
if(!map[i][a[j]]&&!map[i][])
g[i][j]=;
}
//如果阳珠不与相邻的两个阴珠消退,则标记为1
else if(!map[i][a[j]]&&!map[i][a[j+]])
{
g[i][j]=;
}
}
}
int num=hungary();//求出在此排列顺序中最大的匹配数
ans=min(ans,n-num);
}
while(next_permutation(a+,a+n+)); //全排列,排列出来的存在a数组中
cout<<ans<<endl;
}
return ;
}
HDU5727 Necklace(二分图匹配)的更多相关文章
- hdu 5727 Necklace 二分图匹配
题目链接 给2*n个珠子, n<=9, n个阴n个阳. 然后将它们弄成一个环, 阴阳交替.现在给你m个关系, 每个关系给出a, b. 如果阳a和阴b挨着, 那么a就会变暗. 问你最小变暗几个阳. ...
- hdu 5727 Necklace dfs+二分图匹配
Necklace/center> 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5727 Description SJX has 2*N mag ...
- HDU 5727 Necklace(二分图匹配)
[题目链接]http://acm.hdu.edu.cn/showproblem.php?pid=5727 [题目大意] 现在有n颗阴珠子和n颗阳珠子,将它们阴阳相间圆排列构成一个环,已知有些阴珠子和阳 ...
- HDU 5727 Necklace ( 2016多校、二分图匹配 )
题目链接 题意 : 给出 2*N 颗珠子.有 N 颗是阴的.有 N 颗是阳的.现在要把阴阳珠子串成一个环状的项链.而且要求珠子的放置方式必须的阴阳相间的.然后给出你 M 个限制关系.格式为 ( A.B ...
- 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 ...
- BZOJ 1059 & 二分图匹配
题意: 判断一个黑白染色的棋盘能否通过交换行或列使对角线上都是黑色. SOL: 真是有点醉...这种问题要么很神要么很水...第一眼感觉很水但就是不造怎么做...想了10分钟怎么感觉就是判断个数够不够 ...
随机推荐
- c++,函数名不要和某个类名相同 (syntax error : missing ';' before identifier....)
直接上代码: // outside.h class Outside { private: class Inner { public: Inner(Outside& out) : out_(ou ...
- c++课程设计之菜单选择
a) 从键盘输入n个数,选择升序还是降序输出 b)创新了日历 c) 添加了射箭游戏 d)还加入了好玩的24点游戏 学生签名: 年 月 日 课程设计(论文)评阅意见 等 级 项 ...
- Mac QQ 怎么清除聊天记录
在 Mac 电脑上登录 QQ 以后,点击顶部菜单中“应用”下的“消息管理器”选项,如图所示
- 【Android Developers Training】 97. 序言:访问通讯录数据
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Linux实战教学笔记13:定时任务补充
第十三节 定时任务补充 标签(空格分隔): Linux实战教学笔记 ---[更多资料点我查看][1] 1,生产环境常用Crontab专业实例 1.1书写crontab定时任务多个基本要领 1.1.1 ...
- org.apache.commons.beanutils.BeanMap简单使用例子
一.org.apache.commons.beanutils.BeanMap; 将一个java bean允许通过map的api进行调用, 几个支持的操作接口: Object get(Object ke ...
- PageSlider中CSS3动画在除首屏之外先加载页面后执行动画的问题
PageSlider中CSS3动画在除首屏之外先加载页面后执行动画的问题,PageSlider中加入CSS3动画的话,默认只有首屏是从无到有执行动画,其他屏都是显示下页面再执行动画 这就造成其他屏的动 ...
- mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现
项目结构 基础入门可参考:mybatis学习笔记(一)-- 简单入门(附测试Demo详细过程) 开始体验 1.新建项目,新建类MybatisUtil.java,路径:src/util/Mybatis ...
- Elasticsearch学习随笔(二)-- Index 和 Doc 查询新建API总结
本文着重总结Elasticsearch的常见API了,进行分析. Index API 初始化Index,设置shards和replica PUT http://localhost:9200/firew ...
- asp.net core新特性(1):TagHelper
进步,才是人应该有的现象.-- 雨果 今天开始,我就来说说asp.net core的新特性,今天就说说TagHelper标签助手.虽然学习.net,最有帮助的就是microsoft的官方说明文档了,里 ...