HDU 5727 Necklace(二分图匹配)
【题目链接】http://acm.hdu.edu.cn/showproblem.php?pid=5727
【题目大意】
现在有n颗阴珠子和n颗阳珠子,将它们阴阳相间圆排列构成一个环,已知有些阴珠子和阳珠子不能放在相邻的位置,否则这颗阳珠子就会失去功效,输出最少失去能量的阳珠子数目
【题解】
对于阴珠子固定的排列方式,可以用算出阳珠子能够不失去能量就能够放置的位置,将这种关系看成一条边,进行二分图匹配,就可以得不失去能量的阳珠子的最大值,显然就可以获得最少失去能量的数目。
注意在此题中,不知道阴珠子的排列方式,因此,我们需要枚举阴珠子的不同排列方式,由于阴珠子是一个圆排列,因此只要枚举(排列长度-1)的排列即可(注:笔者枚举全排列后超时)。在不同排列的最大匹配中取最大值,用n减去这个值就可以得到答案了。
【代码】
#include <cstdio>
#include <cstring>
#include <climits>
#include <algorithm>
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
const int N=20;
int n,m,ans,x,y,Link[N],g[N][N],used[N],a[N],p[N],f[N][N];
int Dfs(int x){
rep(i,n){
if(g[x][i]&&!used[i]){
used[i]=1;
if(Link[i]==-1||Dfs(Link[i])){Link[i]=x;return 1;}
}
}return 0;
}
int Hungarian(){
int count=0;
memset(Link,-1,sizeof(Link));
rep(i,n){
memset(used,0,sizeof(used));
if(Dfs(i))count++;
}return count;
}
int main(){
while(~scanf("%d%d",&n,&m)){
memset(f,0,sizeof(f));ans=INT_MAX;
for(int i=0;i<m;i++)scanf("%d%d",&x,&y),f[x][y]=1;
if(n==0){puts("0");continue;}
if(n==1){puts(f[1][1]?"1":"0");continue;}
for(int i=0;i<n;i++)p[i]=i+1;
do{
memset(g,0,sizeof(g));
rep(i,n)rep(j,n)if(!f[i+1][p[j]]&&!f[i+1][p[(j+1)%n]])g[i][j]=1;
ans=min(ans,n-Hungarian());
}while(next_permutation(p+1,p+n));
printf("%d\n",ans);
}return 0;
}
HDU 5727 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 ( 2016多校、二分图匹配 )
题目链接 题意 : 给出 2*N 颗珠子.有 N 颗是阴的.有 N 颗是阳的.现在要把阴阳珠子串成一个环状的项链.而且要求珠子的放置方式必须的阴阳相间的.然后给出你 M 个限制关系.格式为 ( A.B ...
- E - Swap - hdu 2819(简单二分图匹配)
题意:如果可以交换行列,问主对角线能不能全为1 分析:要想主对角线全为1很明显要有N个行列不想同的点就行了,可以用二分图匹配计算出来多能有几个.如果小与N就不能.输出要是对的就行,不必和答案一样 ** ...
- A - Fire Net - hdu 1045(二分图匹配)
题意:一个阵地可以向四周扫射,求出来最多能修多少个阵地,墙不可以被扫射透,阵地不能同行或者或者列(有墙隔着例外) 分析:很久以前就做过这道题..当时是练习深搜来着,不过时间复杂度比较高,现在再看突然发 ...
- HDU 5727 - Necklace
题意:( 0 <= n <= 9 ) 现在有n颗阴珠子和n颗阳珠子,将它们阴阳相间圆排列构成一个环, 已知有些阴珠子和阳珠子不能放在相邻的位置,否则这颗阳珠子就会失去功效, ...
- HDU 5727 - Necklace - [全排列+二分图匹配][Hopcroft-Karp算法模板]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5727 Problem DescriptionSJX has 2*N magic gems. ...
- TTTTTTTTTTTTTTTT hdu 5727 Necklace 阴阳珠 二分图匹配+暴力全排列
Necklace Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- HDU 5727 Necklace(全排列+二分图匹配)
http://acm.split.hdu.edu.cn/showproblem.php?pid=5727 题意:现在有n个阳珠子和n个阴珠子,现在要把它们串成项链,要求是阴阳珠子间隔串,但是有些阴阳珠 ...
随机推荐
- css 一些常用属性总结
在项目中经常会用到一些很实用的css代码(*只做功能性记录,不追根究底,如有不合理的欢迎指正) css图片上下居中 /*图片上下居中代码*/ .imgvam { /*非IE的主流浏览器识别的垂直居中的 ...
- Get a handle on PHP Handlers
PHP Handlers? mod_php? FPM? How do we make sense of the inner workings of PHP outside of our lines o ...
- 推荐两个Laravel插件网站
1.https://packagist.org 2.http://packalyst.com
- Criteria 和 DetachedCriteria的区别与使用(转)
转自:http://javapub.iteye.com/blog/1149709 Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在线的, ...
- 第二章 andrid studio创建项目
原文 http://blog.csdn.net/zhanghefu/article/details/9326735 第二章 andrid studio创建项目 第二章 andrid studio创建项 ...
- MAC 下使用ipv6、ipv4观看电视、网络电视
换了mac book,ipv6电视却看不了了,为了看电视,只要自己动手了. 关于ipv6是啥和哪里有ipv6这里就不说了,找度娘吧. 我们观看IPv6视频直播信号有两种,一种是mms协议,另外一种 ...
- 使用jpeglib库实现bmp转jpg
一.vc编译jpeglib库 1.下载源代码 下载地址:http://www.ijg.org/.注意:一定要下载win32 版本 2.编译源代码. A.解压源代码,修改源代码中jconfig.vc为j ...
- Egret的若干局限
Egret是个好东西,整套workflow用下来,特别顺手,对于移动端游戏的开发来说,选择Egret无疑是个不二的选择. 当然,小学语文课上老师就教过一种写作手法,欲扬先抑,笔者今天倒过来,来说说Eg ...
- linux 学习之七-部分ssh命令
ssh命令 /etc/init.d/sshd restart|start|stop 重启|开始|关闭SSH的服务 ssh IP地址 连接SSH Linux scp命令用于Linux之间复制文件和目 ...
- ros消息时间同步与回调
转载自http://blog.csdn.net/zyh821351004/article/details/47758433 方式一: 全局变量形式 : TimeSynchronizer 步骤: 1. ...