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分钟怎么感觉就是判断个数够不够 ...
随机推荐
- Mybatis在oracle批量更新
最近公司业务中为了提高效率要做mybatis批量更新,但是到了oracle数据库中做了好几次都没成功,后来发现mybatis最后少了个分号,可能是Mybatis内部做了异常try catche 处 ...
- 理解容器之间的连通性 - 每天5分钟玩转 Docker 容器技术(34)
通过前面小节的实践,当前 docker host 的网络拓扑结构如下图所示,今天我们将讨论这几个容器之间的连通性. 两个 busybox 容器都挂在 my_net2 上,应该能够互通,我们验证一下: ...
- 阿里巴巴的datasource
阿里巴巴的datasource:<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSourc ...
- JAVA IO流结构图
InputStreamReader和OutputStreamWriter分别继承自java.io包中的Reader和Writer,对他们中的抽象的未实现的方法给出实现.如: public int re ...
- LODOP之票据连续套打笔记<一>
之前项目中需要使用套打,费了半天劲,最后找到LODOP,整体感觉还是不错,简单,满足大多数web套打 这是我项目中需要打印的票据 该票据每张做多显示6条数据,数据超过6条的时候需要进行分页打印,当时做 ...
- Django 踩过的坑(一)
平台:win10 工具:cmd python3 刚刚学习Django搭建环境,网站还木有发布,就直接来了个大麻烦. 一切按着<Django 学习笔记(二)>这篇文章来的,在最后cmd运行服 ...
- 谈谈关于PHP的代码安全相关的一些致命知识
谈谈关于PHP的代码安全相关的一些致命知识 目标 本教程讲解如何防御最常见的安全威胁:SQL 注入.操纵 GET 和 POST 变量.缓冲区溢出攻击.跨站点脚本攻击.浏览器内的数据操纵和远程表单提交. ...
- Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射
1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; privat ...
- 如何在一个Eclipse同时启动两个Tomcat
比如:有两个版本的tomcat,一个5.*,一个6.*,此时由于两个工程分别部署在两个版本的tomcat下,需要同时启动两个tomcat,以下是方法: 1.特别要注意: 不要设置CATALINA_HO ...
- MySql单表最大8000W+ 之数据库遇瓶颈记
前言 昨晚救火到两三点,早上七点多醒来,朦胧中醒来发现电脑还开着,赶紧爬起来看昨晚执行的SQL命令结果.由于昨晚升级了阿里云的RDS,等了将近两个小时 还在 升降级中,早上阿里云那边回复升级过程中出现 ...