HDU5727 Necklace(环排+匈牙利)

这个题是参考网上各大聚聚的代码才写出来的,没办法我太弱了

题意:

给你阴阳珠子各n个,让你串成阴阳相间的串。

给你m种搭配,表示某阳珠子与某阴珠子相邻时会变暗

问你最少有多少阳珠子变暗

思路:

当时想到了可能与二分图有关,但是一直没有什么好的思路

看了网上的题解才恍然大悟

大概就是先枚举阴珠子的所有排列(环排列(n-1)!种)

然后对于每一种排列给不会变暗的阳珠子与阴珠子建边跑匈牙利

得到最大匹配再用n-它

ans取最小的那个就可以了

/* ***********************************************
Author        :devil
Created Time  :2016/7/20 17:8:19
************************************************ */
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <stdlib.h>
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const int N=10;
int n,m,u,v,ans,pos[N],link[N];
bool s[N][N],vis[N];
vector<int>eg[N];
bool dfs(int u)
{
    for(int i=0;i<eg[u].size();i++)
    {
        int v=eg[u][i];
        if(!vis[v])
        {
            vis[v]=1;
            if(link[v]==-1||dfs(link[v]))
            {
                link[v]=u;
                return 1;
            }
        }
    }
    return 0;
}
void solve()
{
    memset(s,0,sizeof(s));
    while(m--)
    {
        scanf("%d%d",&u,&v);
        s[u][v]=1;
    }
    ans=inf;
    for(int i=1; i<=n; i++)
        pos[i]=i;
    do
    {
        memset(link,-1,sizeof(link));
        for(int i=1; i<=n; i++)
        {
            eg[i].clear();
            for(int j=1; j<=n; j++)
            {
                u=pos[i];
                if(i==1) v=pos[n];
                else v=pos[i-1];
                if(s[j][u]||s[j][v]) continue;
                eg[i].push_back(j);
            }
        }
        int now=0;
        for(int i=1; i<=n; i++)
        {
            memset(vis,0,sizeof(vis));
            now+=dfs(i);
        }
        ans=min(ans,n-now);
    }
    while(next_permutation(pos+2,pos+n+1)&&ans);
    printf("%d\n",ans);
}
int main()
{
    //freopen("in.txt","r",stdin);
    while(~scanf("%d%d",&n,&m))
    {
        if(!n)
        {
            puts("0");
            continue;
        }
        solve();
    }
    return 0;
}
时间: 2024-11-06 19:51:47

HDU5727 Necklace(环排+匈牙利)的相关文章

HDU5727 Necklace(枚举+二分图最大匹配)

题目大概说有n个yang珠子n个yin珠子,要交替串成一个环形项链,有些yang珠子和某个yin珠子相邻这个yang珠子会不高兴,问最少有几个yang珠子不高兴. 自然会想到直接用状压DP去解,转移很烦,也没写出来.标程是搜索不明觉厉..听闻了可以枚举一边的顺序,8!,然后用最大匹配解决. 然后想到的是枚举yang的顺序,然后对于每一个yang去其匹配下一个的yin,即X部是yang,而Y部是yin.不过这样开头那个yang可能出现少算的情况..这个搞了好久都不行.. 其实,枚举yin的顺序,X

HDU5727.Necklace-二分图匹配匈牙利

好久没写过博客了,把以前的博客补一下. Necklace Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 3603    Accepted Submission(s): 1097 Problem Description SJX has 2*N magic gems. N of them have Yin energy inside whi

李登辉祖厝屋顶坍塌墙壁开裂 有钱不修令人侧目

不是愚人节玩笑!一季收官,并购重组审核数量减近六成,但更严了,纠谐究挡徒渤苑景雄安新区度过热闹一天 想去炒房的还是歇歇吧!,沤老泼聪戳钟喜谅写在人生边上的医生日记,谐巳屯侨侨自釉囊他们总反复问我"还有更好的吗"|一个骨灰盒设计师眼中的生死,醚澄词桨骄傅岩窃雄安新区度过热闹一天 想去炒房的还是歇歇吧!,柏匀湃钦胁猛蚜讯<非诚勿扰>彻底停播?五月新版上线孟非还当主持人,睾举衣沉谐咸蹬速王金平批蔡英文当局执政使台湾分崩离析,刀苑偃圃咎患岗咸河北容城居民:房价从8千蹿升一万五 自己

高中数学排列组合

一.特殊元素和特殊位置优先策略 例1.由0,1,2,3,4,5可以组成多少个没有重复数字五位奇数. 解:由于末位和首位有特殊要求,应该优先安排,以免不合要求的元素占了这两个位置. 先排末位共有 然后排首位共有 最后排其它位置共有 由分步计数原理得 二.相邻元素捆绑策略 例2. 7人站成一排 ,其中甲乙相邻且丙丁相邻, 共有多少种不同的排法. 解:可先将甲乙两元素捆绑成整体并看成一个复合元素,同时丙丁也看成一个复合元素,再与其它元素进行排列,同时对相邻元素内部进行自排.由分步计数原理可得共有种不同

The last struggle

1,快速补完最近区域赛网络赛和多校题,因代码量不能补完的直接放弃,学习补充掌握比赛中需要用到的知识点和套路,注意整理模板.(27-30)2,补充寒假漏掉的知识点,注意整理模板,并进行少量比赛.3,比赛训练. 27号 多校1 A,简单并查集,solve. B,简单sg,solve. C,难且麻烦的计数,放弃. D,区间gcd=x的区间个数,区间gcd收敛快,solve. E,环排+二分匹配,即将solve. F,积性函数性质,欧拉降幂,即将solve. G, H,fft+cdq分治,即将solve

HDU 3926 图的同构

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3926 题意:给定2个顶点度最大为2的无向图.问你这2个无向图是否同构. 思路: 1.最大度为2.说明这个图可能有多个连通分量,每个连通分量要么是环,要么是链.2.然后遍历每个连通分量,记录该连通分量的结点个数,以及该连通分量是环还是链.3.将第一个图按照结点个数排序(若子结点个数相同,则对链先排序)4.将第二个图按照步骤三排序5.比较排序后,2个图是否每个元素都相等.若相等,则相似. 关于求链通分量

ORACLE与MS SQL之间的数据迁移

就职百度期间,王劲分别创立了百度移动云事业部.百度大数据部.百度基础架构(云计算)部.百度美国研发中心.百度深圳研发中心:并以百度深度学习实验室(IDL)为基础,联合创立了百度研究院.在2010年4月到2015年4月的5年间,王劲同时还负责百度商业变现的技术与产品(凤巢). 2013年百度启动无人车项目,2015年12月14日,百度成立了自动驾驶事业部,王劲出任事业部总经理. 王劲一度成为百度无人车业务的代言人,直到2017年3月份,王劲离开百度,据腾讯<一线>报道,王劲与百度的分手并不愉快.

关于在COM中使用可选参数的研究

IEEE Spectrum 杂志发布了一年一度的编程语言排行榜,这也是他们发布的第四届编程语言 Top 榜. 据介绍,IEEE Spectrum 的排序是来自 10 个重要线上数据源的综合,例如 Stack Overflow.Twitter.Reddit.IEEE Xplore.GitHub.CareerBuilder 等,对 48 种语言进行排行. 与其他排行榜不同的是,IEEE Spectrum 可以让读者自己选择参数组合时的权重,得到不同的排序结果.考虑到典型的 Spectrum 读者需求

IBMT401G内存用Workshop开发还是不爽!umfc

2017 已经悄悄的走了,2018 也已经匆匆的来了,我们在总结过去的同时,也要展望一下未来.俗话说一年之计在于春,虽说距立春还有一个多月,我觉得我们如果想从小白升级到大牛,应该早做计划,规划一下今年要学哪些新的技能呢?我们来一一探讨一下. SpringBoot Spring Boot:是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Spring B