博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LuoguP2055 [ZJOI2009]假期的宿舍【二分图最大匹配】By cellur925
阅读量:5327 次
发布时间:2019-06-14

本文共 2117 字,大约阅读时间需要 7 分钟。

这道题开始感觉不出是二分图最大匹配的qwq。但是今天学了匈牙利算法,想来做几个题qwq。做这个题的时候想了很久它哪里是二分图,脑子里是“两列,每列有很多点的那种图 qwq。”

然后看了题解,发现竟是这样简单qwq。

关键还在建图。

首先把本校且不回家的学生自己向自己连一条边,之后再把和自己认识的还是本校的学生连一条边(不用管他回不回家),之后跑一遍最大匹配就成了。

回顾一下我们发现,它确实满足“任意两条边没有公共端点”的性质,因为我们暂时排除了基♂的情况,不会有两个人睡在一张床上。

然后注意在主程序中跑匹配的时候,不是每个点都跑,而是那些有住宿需求的人跑。(为此WA了两次qwq)

Code

1 #include
2 #include
3 #include
4 5 using namespace std; 6 7 int T,n,sta,ans,tot; 8 int stu[100],head[100],home[100],match[100]; 9 bool vis[100];10 struct node{11 int to,next;12 }edge[10000];13 14 void add(int x,int y)15 {16 edge[++tot].to=y;17 edge[tot].next=head[x];18 head[x]=tot;19 }20 21 bool dfs(int x)22 {23 for(int i=head[x];i;i=edge[i].next)24 {25 int y=edge[i].to;26 if(!vis[y])27 {28 vis[y]=1;29 if(!match[y]||dfs(match[y]))30 {31 match[y]=x;32 return 1;33 }34 }35 }36 return 0;37 }38 39 int main()40 {41 scanf("%d",&T);42 while(T--)43 {44 scanf("%d",&n);45 for(int i=1;i<=n;i++) scanf("%d",&stu[i]);46 for(int i=1;i<=n;i++)47 {48 if(stu[i]) scanf("%d",&home[i]);49 else scanf("%d",&home[0]);50 if(!home[i]&&stu[i]) add(i,i);51 } 52 for(int i=1;i<=n;i++)53 for(int j=1;j<=n;j++)54 {55 int x=0;56 scanf("%d",&x);57 if(x&&stu[j]) add(i,j);58 }59 for(int i=1;i<=n;i++)60 if(!stu[i]||(!home[i]&&stu[i])) sta++; 61 for(int i=1;i<=n;i++)62 if(!stu[i]||(!home[i]&&stu[i]))63 {64 memset(vis,0,sizeof(vis));65 if(dfs(i)) ans++;66 }67 if(ans==sta) printf("^_^\n");68 else printf("T_T\n");69 memset(match,0,sizeof(match));70 memset(head,0,sizeof(head));71 sta=0,ans=0,tot=0;72 }73 return 0;74 }
View Code

 

转载于:https://www.cnblogs.com/nopartyfoucaodong/p/9696001.html

你可能感兴趣的文章
移动端 响应式、自适应、适配 实现方法分析(和其他基础知识拓展)
查看>>
PHP之Trait详解
查看>>
Netty学习(三)高性能之ByteBuf源码解析(篇幅较长)
查看>>
selenium-窗口切换
查看>>
selenium-滚动
查看>>
win安装appium
查看>>
Ubuntu18.04中安装virtualenv和virtualenvwrapper
查看>>
read from and write to file
查看>>
下载文件,blob方式
查看>>
使用vue的v-model自定义 checkbox组件
查看>>
Amcharts 柱状图和线形图
查看>>
APC注入
查看>>
关于ES6 Class语法相关总结
查看>>
文件处理
查看>>
[工具] Seer 代码预览器
查看>>
[工具] Sublime Text 使用指南
查看>>
Hangfire在ASP.NET CORE中的简单实现方法
查看>>
今晚的比赛(2011.12.4)
查看>>
统计细菌基因组ORF
查看>>
Unity3D笔记 英保通三 脚本编写 、物体间通信
查看>>