巴黎公社社员造船厂Project1129研制成功

题面

这道题神啊.

看了一下午没有思路,感觉是二分图没有深刻理解,又重新看了一遍蓝书上的二分图,还打了道题练手,然而还是没有想出这道题......

于是恰饭回来决定看下题解,恍然大悟.

同志们可以把每一个点看做一条匹配边,把它的的行数和列数连一条边,会发现整幅图是一组匹配.

在交换行和列的时候,相当于在匈牙利算法中进行协商的过程,所以对最大匹配不变.

如果交换后可以有n个及以上的匹配,就说明一定可以实现题意.

配图如下(图里的字体有点小请见谅):

然后就是跑一个裸的匈牙利,求出匹配个数就可以了.

代码:


#pragma GCC diagnostic error "-std=c++11"
#pragma GCC target("sse2")
#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;

struct edge
{
    int to,next;
}e[1000010];

int t,n,size,CommunismParty_cnt;
int head[1000010],match[1000010];
bool flag[1000010];

inline void EdgeAdd(int,int);
inline void Hungary();
inline bool find(int);

int main()
{
    scanf("%d",&t);
    for(int _=1;_<=t;_++)
    {
        scanf("%d",&n);
        CommunismParty_cnt=0;
        size=0;
        memset(head,-1,sizeof(head));
        memset(match,0,sizeof(match));
        memset(e,0,sizeof(e));
        for(int __=1;__<=n;__++)
        {
            for(int ___=1;___<=n;___++)
            {
                int CommunistYouthLeague_color;
                scanf("%d",&CommunistYouthLeague_color);
                if(CommunistYouthLeague_color==1)
                {
                    EdgeAdd(__,___);
                }
            }
        }
        Hungary();
        printf("%s\n",CommunismParty_cnt>=n?"Yes":"No");
    }
return 0;
}

inline void EdgeAdd(int from,int to)
{
    e[++size].to=to;
    e[size].next=head[from];
    head[from]=size;
}

inline void Hungary()
{
    for(int _=1;_<=n;_++)
    {
        memset(flag,false,sizeof(flag));
        if(find(_)==true)
        {
            CommunismParty_cnt++;
        }
    }
}

inline bool find(int from)
{
    for(int _=head[from];_!=-1;_=e[_].next)
    {
        int to=e[_].to;
        if(flag[to]==false)
        {
            flag[to]=true;
            if(match[to]==0||find(match[to])==true)
            {
                match[to]=from;
                return true;
            }
        }
    }
return false;
}

原文地址:https://www.cnblogs.com/Lemir3/p/11104604.html

时间: 2024-10-14 09:46:56

巴黎公社社员造船厂Project1129研制成功的相关文章

共享单车“空中”放 首钢研制成功单车立体车库x1

好在事情比较顺利,比对了100多条信息后,小女孩在宁波的户籍地址被发现了.其中畅销系列随行太保,不仅技术先进,且外观抢眼,主打舒适时尚,很受儿童欢迎.被告陈洪金在本次事故中有重大过错,对黄江龙死亡造成的损失应承担主要赔偿责任,即60%的责任推荐阅读聚焦三中全会改革楼继伟详解税收路线,清理"税收洼地"不再出区域优惠政策.万科在南京近期开盘的项目有九都荟和金域蓝湾.他认为,年轻人的生活就应该是积极向上.健康环保的.恒大队的对手首尔队将于明日乘坐OZ369航班11时30分抵达广州,将下榻东方

小米的成功可以复制?

一: 2010年4月,一个新的手机品牌横空出世,那就是小米.雷军说,我们要用互联网思维卖手机,我们的手机是为发烧友而生. 小米之前,对于一部手机来说,它的配置高,也就意味着它的价格绝对不低,所以,对于极大多数的普通用户来说,他们能买到的手机,往往都是卡.慢.丑.尤其是对于爱折腾的年轻人来说,这种手机是不可忍受的,他们期望能有一款这样的手机,配置高,价格可以接受,也就是俗称的性价比要高.于是,当小米喊着“为发烧友而生”的口号进入这个市场的时候,这些用户们沸腾了.激动了.疯狂了.因为他们终于等到了这

ODREI的故事

﹀ 1839年,在巴塞尔(Basel)自然科学大会上,德国人舒贝因(Schonbein)发表在电解稀硫酸实验过程中阳极产生气味的报告,肯定臭氧的存在,并定义其为活性氧.1840年他正式向慕尼黑科学院提交报告,宣布发现臭氧并被授予德国化学科学家称号,被世界公认为"臭氧之父". ﹀ 1868年德国人德·格贝斯(De·Gebeth)用臭氧将煤焦油混合物氧化适用于涂料.油漆使用的产品,并获得了世界上臭氧技术的第一个专利,是臭氧应用史上的一个里程碑. ﹀ 1920年,德国停止在医疗.净水.食品安

Android从无知到有知——NO.2

这几天虽说偶遇瓶颈.但也渐入佳境.因为之前没有接触过android,所以作为一个新手不会给自己过高的要求.相比于去年做的分布式资源检索,今年的移动开发着实要简单一些.尽管其本质没有太大的差别,但从用户体验方面来说更能激发每一位学习者的兴趣,这可能就是android的魅力所在吧... 前天做的"电话拨号器",最后载入到模拟器的时候不知道哪里出了错,系统总是自己主动关闭,恼羞成怒也就没再搭理它.昨天又做了"短信发送器",也遇到了和前者相似的问题,只是最后经过调试算是研制

电脑史话(1)

电脑史话(1)――计算机始祖 已历经了50多个春华秋实.英语里“Calculus”(计算)一词来源于拉丁语,既有“算法”的含义,也有肾脏或胆囊里的“结石”的意思.不知何时,许多国家的人都不约而同想到用“筹码”来改进工具,其中要数中国的算筹最有名气.商周时代问世的算筹,实际上是一种竹制.木制或骨制的小棍.古人在地面或盘子里反复摆弄这些小棍,通过移动来进行计算,从此出现了“运筹”这个词,运筹就是计算,后来才派生出“筹”的词义.中国古代科学家祖冲之最先算出了圆周率小数点后的第6位,使用的工具正是算筹,

计算机语言发展史

软件的产生始于早期的机械式计算机的开发.从19世纪起,随着机械式计算机的更新,出现了穿孔卡片,这种卡片可以指导计算机进行工作.但是直到20世纪中期现代化的电子计算机出现之后,软件才真正得以飞速发展.在世界上第一台计算机ENIAC上使用的也是穿孔卡片,在卡片上使用的是专家们才能理解的语言,由于它与人类语言的差别极大,所以我们称之为机器语言.也就是第一代计算机语言.这种语言本质上是计算机能识别的唯一语言,但人类却很难理解它,以后的计算机语言就是在这个基础上,将机器语言越来越简化到人类能够直接理解的.

操作系统发展简史

CP/M系统 计算机语言百花争妍的七十年代,计算机本身正向微型化方向发展.1971年,Intel 公司成功地研制出了四位Intel 4004芯片,1973年,又研制成功八位Intel 8086芯片.微型机的诞生,已经指日可待. 七十年代中期,台式微机,工作站,超级微机,膝上机相继面世,"谁来指挥他们",人们千呼万唤. 事实上,早在1972年,AMAA(美国微型机协会)就悄悄地为一个"指挥系统"作临产前的准备了,他们用PL/M程序设计语言为Intel 8086编写了纸

中国大推力矢量发动机WS15 跨入 世界先进水平!

"太行"WS-15让俄闭嘴令美叹服 歼20试飞向世界证明,中国军工世界一流,并有望与美英法争夺新一代航空发动机桂冠.笔者请教解放军专家证实:中国四代机所配套的两台18吨推力的WS-15"太行"发动机(原文如此),其性能基本赶上了俄罗斯和美国欧洲的同类引 擎,晋身世界航空三鼎甲的前景已经明朗化.这不可是国产战机确保国土制空权,并且是民航机广大市场也看到了收复失地的曙光. 太行发动机(尾喷口). 中国军事图片中心 记者乔天富 摄 回想2009年某军刊"中国航空

企业计算模式

第五节 企业计算模式 计算机应用系统中数据与应用(程序)的分布方式称为企业计算机应用系统的计算模式,有时也称为企业计算模式. 自世界上第一台计算机诞生以来, 计算机作为人类信息处理的工具已有半个多世纪了,在这个发展过程中计算机应用系统的模式发生了几次变革.计算机应用系统已经历了四种计算模式,它们分别是:单主机计算模式.分布式客户/服务器计算模式(Client/Server—C/S)和浏览器/服务器计算模式(Browser/Server—B/S) ,云计算模式.这几种计算模式的出现与计算机.网络及