HDU5727 Necklace(枚举 + 二分图最大匹配)
题目大概说有n个yang珠子n个yin珠子,要交替串成一个环形项链,有些yang珠子和某个yin珠子相邻这个yang珠子会不高兴,问最少有几个yang珠子不高兴。
自然会想到直接用状压DP去解,转移很烦,也没写出来。标程是搜索不明觉厉。。听闻了可以枚举一边的顺序,8!,然后用最大匹配解决。
然后想到的是枚举yang的顺序,然后对于每一个yang去其匹配下一个的yin,即X部是yang,而Y部是yin。不过这样开头那个yang可能出现少算的情况。。这个搞了好久都不行。。
其实,枚举yin的顺序,X部是各个yang,而Y部是位置!然后问题就引刃而解。我太菜了。。
另外用最大流超时了,然后用了个匈牙利过了,O((n-1)!*n3)的时间复杂度。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; int n,map[][],mat[];
bool used[];
bool crosspath(int k){
for(int i=; i<=map[k][]; ++i){
int j=map[k][i];
if(!used[j]){
used[j]=true;
if(mat[j]== || crosspath(mat[j])){
mat[j]=k;
return true;
}
}
}
return false;
} int hungary(){
int res=;
for(int i=; i<=n; ++i){
memset(used,,sizeof(used));
if(crosspath(i)) ++res;
}
return res;
} bool rel[][];
int main(){
int m;
while(~scanf("%d%d",&n,&m)){
memset(rel,,sizeof(rel));
int a,b;
while(m--){
scanf("%d%d",&a,&b);
rel[a][b]=;
} if(n== && rel[][]){
puts("");
continue;
}
if(n<=){
puts("");
continue;
} int seq[];
for(int i=; i<=n; ++i){
seq[i]=i;
} int res=;
do{
for(int i=; i<=*n; ++i) map[i][]=;
memset(mat,,sizeof(mat));
for(int i=; i<=n; ++i){
for(int j=; j<=n; ++j){
if(rel[i][seq[j]] || rel[i][seq[j%n+]]) continue;
map[i][++map[i][]]=j+n;
map[j+n][++map[j+n][]]=i;
}
}
res=max(res,hungary());
}while(next_permutation(seq+,seq++n));
printf("%d\n",n-res);
}
return ;
}
HDU5727 Necklace(枚举 + 二分图最大匹配)的更多相关文章
- [HDU5727]Necklace(二分图最大匹配,枚举)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5727 题意:有N个阴珠子和N个阳珠子,特定序号的阴阳珠子放在一起会让阳珠子暗淡.现在问排放成一个环,如 ...
- HDU5727 Necklace(二分图匹配)
Problem Description SJX has 2*N magic gems. N of them have Yin energy inside while others have Yang ...
- POJ3057 Evacuation(二分图最大匹配)
人作X部:把门按时间拆点,作Y部:如果某人能在某个时间到达某门则连边.就是个二分图最大匹配. 时间可以二分枚举,或者直接从1枚举时间然后加新边在原来的基础上进行增广. 谨记:时间是个不可忽视的维度. ...
- HDU:过山车(二分图最大匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=2063 题意:有m个男,n个女,和 k 条边,求有多少对男女可以搭配. 思路:裸的二分图最大匹配,匈牙利算法. 枚 ...
- Luogu 1402 酒店之王(二分图最大匹配)
Luogu 1402 酒店之王(二分图最大匹配) Description XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自 ...
- Luogu 2756 飞行员配对方案问题(二分图最大匹配)
Luogu 2756 飞行员配对方案问题(二分图最大匹配) Description 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞 ...
- Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall / POJ 1274 The Perfect Stall(二分图最大匹配)
Luogu 1894 [USACO4.2]完美的牛栏The Perfect Stall / POJ 1274 The Perfect Stall(二分图最大匹配) Description 农夫约翰上个 ...
- 二分图最大匹配|UOJ#78|匈牙利算法|边表|Elena
#78. 二分图最大匹配 从前一个和谐的班级,有 nlnl 个是男生,有 nrnr 个是女生.编号分别为 1,…,nl1,…,nl 和 1,…,nr1,…,nr. 有若干个这样的条件:第 vv 个男生 ...
- HDU 5727 - Necklace - [全排列+二分图匹配][Hopcroft-Karp算法模板]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5727 Problem DescriptionSJX has 2*N magic gems. ...
随机推荐
- 合唱队形2(洛谷U5874)
题目背景 上次老师挑出来的(N-K)位同学很不高兴,于是他们准备自己组建合唱队形.他们请了kkk来帮忙. 题目描述 他们安排了一个动作--手拉着手唱一首歌(就是他们围成一个圈).如果有两个相邻的同学的 ...
- web页面记住密码存在安全问题 - 处理方式
现在一般安全网站都不会做记住密码功能,因为记住密码存在安全缺陷. 不考虑网络拦截问题,如果是登录页面记住密码,第二次登录,直接进入开发者模式修改类型为text即可看到密码. 处理方式: 1.把auto ...
- Android 毛玻璃效果
muzei live wallpaper https://github.com/romannurik/muzei
- The Triangle
针对如下形式的ACM试题,大多出自南阳理工学院的在线ACM试题(网址: 南阳理工在线评测系统),在此非常感谢,同时也非常感谢作者的分享! 时间限制:1000 ms | 内存限制:65535 KB ...
- jquery学习笔记---requirejs 和模块化编程
http://www.cnblogs.com/lisongy/p/4711056.html jquery模块化编程:http://www.cnblogs.com/digdeep/p/4602460.h ...
- Spring.Net学习之简单的知识点(一)
1.Spring.Net是一个开源的应用程序框架,可以简化开发主要功能(1)实现控制反转(IOC/DI),也就是不要直接new,依赖于接口(2)面向切面编程(AOP),就是向程序中利用委托注册事件简单 ...
- ListView 完全优化 + 多种listitem布局处理
# 百度了下,感觉下面的博客文章还都挺全面的,写的很好,直接分享得了 Android性能优化--Listview优化 - tonycheng93 - 博客园http://www.cnblogs.co ...
- Windows 10 周年更新正式版下载 + win10 快捷键
Windows 10 周年更新正式版 360云资源总汇(施工中): https://yunpan.cn/c6Svi7Az52XBs (提取码:e5dd)今后提到周年更新版.1607版或RS1版,都是 ...
- Linux Shell 高级编程技巧2----shell工具
2.shell工具 2.1.日志文件 简介 创建日志文件是很重要的,记录了重要的信息.一旦出现错误,这些信息对于我们排错是非常有用的:监控的信息也可以记录到日 ...
- Codeforces Round #363 Fix a Tree(树 拓扑排序)
先做拓扑排序,再bfs处理 #include<cstdio> #include<iostream> #include<cstdlib> #include<cs ...