二分图
andyc_03
这个作者很懒,什么都没留下…
展开
-
【二分图】P2756 飞行员配对方案问题
正常的匈牙利算法,只要输出mat即为方案 代码 #include<bits/stdc++.h> using namespace std; const int maxn=10005; int n,m,cnt,head[maxn],mat[maxn],vis[maxn]; struct edge { int to,nxt; }G[maxn]; void add(int x,int y) { G[++cnt].nxt=head[x]; G[cnt].to=y; head[x]=cnt;.原创 2020-07-31 17:38:03 · 143 阅读 · 0 评论 -
【二分图】P2055 [ZJOI2009]假期的宿舍
由于一个人对应一张床,所以考虑到二分图匹配 对于不离校的住校生,直接将自己与自己的床建边 离校的学生当然不用建边 对于非住校生,那就和他有人际关系的人的床连边 最后统计最大匹配即可 代码 #include<bits/stdc++.h> using namespace std; const int maxn=105; int t,n,x,cnt,vis[maxn],mat[maxn],s[maxn],h[maxn],head[maxn]; struct edge { int .原创 2020-07-31 17:28:30 · 123 阅读 · 0 评论 -
【二分图匹配】P1129 [ZJOI2007]矩阵游戏
这道题和横行和竖列交换的操作看起来与二分图无关 在看了题解的思想后才知道,可以将每个黑子的横坐标与纵坐标之间连边,然后跑最大匹配,如果最大匹配n,则yes 为什么呢?其实对于交换行和列,可以理解为改变左右两部的节点编号,去满足i->i之间有边,而我们不想进行改编号的操作,那么就可以去算最大匹配,如果最大匹配大于等于n,那就意味着可以通过改变编号的方式达到对角线的位置上有棋子 这道题的思路真的很不错 代码 #include<bits/stdc++.h> using name.原创 2020-07-31 16:50:55 · 98 阅读 · 0 评论 -
【匈牙利算法】P3386 【模板】二分图最大匹配
给定一张二分图,其左部点集大小为 n,右部点集大小为 m,请求出其最大匹配。 对于以上问题,匈牙利算法给出的解决方案为,对于每个节点u,先匹配它第一条边,若对应的v还没被匹配,就可以顺理成章的将u、v匹配上,进行下一个u的匹配;若此时的v已经被之前的u'匹配上了,那么就看u'能否有其他的选择,如果有就可以让u'退让,连v',然后u就可以连v了;如果u'没有其他选择,那就不让,使得u没有对应的匹配 大概的思路就是这样 其实也可以用网络流解决,将左部的节点连一个超级源点,右部的点全部连一个超级..原创 2020-07-31 16:26:34 · 143 阅读 · 0 评论