HDU 5727 Necklace(全排列+二分图匹配)
http://acm.split.hdu.edu.cn/showproblem.php?pid=5727
题意:
现在有n个阳珠子和n个阴珠子,现在要把它们串成项链,要求是阴阳珠子间隔串,但是有些阴阳珠子在一起会让阳珠子变弱,现在问你串起来之后最少有几个阳珠子会变弱。
思路:
很考验思维的一道题目啊~
珠子一共也就9个,阴珠子是固定的,现在就可以先枚举阴珠子的排列顺序(可以用STL自带的全排列),然后对于阳珠子,看看它可以串在哪个位置(和前后两个阴珠子都可以相连),可以的话则连边。这样最后求个最大匹配即可。
不过这题很卡时间,在全排列的时候,因为是环排,所以只需要排n-1位即可,否则会TLE!
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
#include<queue>
#include<cmath>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef pair<int,int> pll;
const int INF = 0x3f3f3f3f;
const int maxn = 1e5 + ; int ans;
int n, m;
int a[];
bool unable[][];
bool vis[];
int mark[]; vector<int> G[]; bool match(int u)
{
for(int i=;i<G[u].size();i++)
{
int v=G[u][i];
if(!vis[v])
{
vis[v]=true;
if(mark[v]==- || match(mark[v]))
{
mark[v]=u;
return true;
}
}
}
return false;
} void solve()
{
for(int i=;i<;i++) G[i].clear();
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
int nxt=i,pre=i-;
if(pre==) pre=n;
if(!unable[j][a[pre]] && !unable[j][a[nxt]])
G[j].push_back(i);
}
} memset(mark,-,sizeof(mark));
int sum=;
for(int i=;i<=n;i++)
{
memset(vis,false,sizeof(vis));
if(match(i)) sum++;
}
ans=min(ans,n-sum);
} int main()
{
//freopen("in.txt","r",stdin);
while(~scanf("%d%d",&n,&m))
{
memset(unable,false,sizeof(unable));
while(m--)
{
int u,v;
scanf("%d%d",&u,&v);
unable[u][v]=true;
}
if(n== || m==) {puts("");continue;}
ans=INF;
for(int i=;i<=n;i++) a[i]=i;
do
{
solve();
}while(next_permutation(a+,a+n)); //因为是个环,所以只需要全排列(n-1)个数就好,少了一个*n的复杂度
printf("%d\n",ans);
}
return ;
}
HDU 5727 Necklace(全排列+二分图匹配)的更多相关文章
- HDU 5727 - Necklace - [全排列+二分图匹配][Hopcroft-Karp算法模板]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5727 Problem DescriptionSJX has 2*N magic gems. ...
- 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 二分图匹配
题目链接 给2*n个珠子, n<=9, n个阴n个阳. 然后将它们弄成一个环, 阴阳交替.现在给你m个关系, 每个关系给出a, b. 如果阳a和阴b挨着, 那么a就会变暗. 问你最小变暗几个阳. ...
- HDU 5727 Necklace ( 2016多校、二分图匹配 )
题目链接 题意 : 给出 2*N 颗珠子.有 N 颗是阴的.有 N 颗是阳的.现在要把阴阳珠子串成一个环状的项链.而且要求珠子的放置方式必须的阴阳相间的.然后给出你 M 个限制关系.格式为 ( A.B ...
- HDU 1083 网络流之二分图匹配
http://acm.hdu.edu.cn/showproblem.php?pid=1083 二分图匹配用得很多 这道题只需要简化的二分匹配 #include<iostream> #inc ...
- HDU 5727 - Necklace
题意:( 0 <= n <= 9 ) 现在有n颗阴珠子和n颗阳珠子,将它们阴阳相间圆排列构成一个环, 已知有些阴珠子和阳珠子不能放在相邻的位置,否则这颗阳珠子就会失去功效, ...
- HDU 2819 Swap(二分图匹配)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2819 [题目大意] 给出一个棋盘,由白格子和黑格子组成,可以交换棋盘的行列, 使得其主对角线为黑格 ...
- hdu 5943(素数间隔+二分图匹配)
Kingdom of Obsession Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- TTTTTTTTTTTTTTTT hdu 5727 Necklace 阴阳珠 二分图匹配+暴力全排列
Necklace Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
随机推荐
- intelj idea安装和配置
1|0优势 intellij idea 是目前公认的java最好的开发工具之一,商业版的IntelliJ应该包含了对 HTML5.CSS3.SASS.LESS.JavaScript.CoffeeScr ...
- create-react-app @observer装饰器报错
npm install --save-dev babel-plugin-transform-decorators-legacy 然后在node_modules/babel-preset-react-a ...
- php Allocator Jemalloc TCMalloc那个内存分配器比较好?
php Allocator Jemalloc TCMalloc那个内存分配器比较好? php一键安装脚本可以选择是否安装内存优化 You have 3 options for your Memory ...
- webStorm 2018 激活
原文地址 https://blog.csdn.net/jiangxinyu50/article/details/79104016 webStorm 2018 激活 今天早上一更新webStorm,之前 ...
- Linux 执行程序 报错误:Permission denied.
是对此文件所在位置没有权限导致的 chmod +x /home/yourfile 即可
- 学写网页 #06# table
A B E C D <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> & ...
- 用到临时表空间的几种SQL
用到临时表空间的几种SQL CREATE INDEX SELECT ... ORDER BY SELECT DISTINCT ... SELECT ... GROUP BY SELECT ... UN ...
- Spring Boot 2(一):Spring Boot 2.0新特性
Spring Boot 2(一):Spring Boot 2.0新特性 Spring Boot依赖于Spring,而Spring Cloud又依赖于Spring Boot,因此Spring Boot2 ...
- linux检查系统CPU,内存,磁盘使用率
#!/bin/bash CPU=`top -bn 1 -i -c | sed -n '3p' | awk -F ':' '{print$2}' | awk '{print$1}'` MEM=`free ...
- Redhat7.4 vim编辑无颜色解决
背景 发现使用vim时, 统一颜色, 不区分关键字 解决 vim /etc/profile 在文件的末尾加入下面这一行 export TERM=xterm