
二分图匹配
悭吝韶华
在学习Unity和图形学.
展开
-
E. Maximize Mex(匈牙利)
传送门 非常巧妙的变形题,契合了模板。 对于二分图的左部,采取pip_ipi作为点。右部,则采用cic_ici作为点. 为什么这样做呢,左右互换不行吗? 其实是考虑到匈牙利是从左部的点开始dfs看有无增光路的。 考虑逆推,即从最后一个询问的答案开始计算,可以知道此时二分图中的边最少。 首先假定答案为0,那么无匹配边,此时我们只能加入pi<=0p_i<=0pi<=0的点,如果dfs产生了增光路,那么ans++,同时加入pi<=ansp_i<=anspi<=ans的点原创 2020-08-23 17:04:54 · 272 阅读 · 0 评论 -
D. George and Interesting Graph[二分图匹配+拆点+枚举]
1.枚举每个点作为中心点,去掉中心点和所有和中心点相连接的点,并统计数量. 2.这样处理完了中心点相关的边后,其余的点出入度均为1,把每个点拆成入点和出点跑二分图匹配即可. 传送门 #include<bits/stdc++.h> using namespace std; #define ll long long #define MAXN 1020 #define fore(n) for(int i=1;i<=n;i++) ll n,m; vector<int>g[MAXN];原创 2020-07-31 22:32:03 · 230 阅读 · 0 评论 -
二分图匹配
模板 1.如何找到二分图的最大匹配 匈牙利算法 时间复杂度(L*(R+M)) L为左部点数,R为右部点数,M为边数。 核心思想 巧妙利用递归去寻找增广路径。 对每个左部点X进行处理,看能不能在右部找到匹配点。 如果该右部点已经使用过,那么对和它匹配的那个左部点Y进行搜索,看能不能找到一个替换,如果找到则表明可以让X抢占Y之前的匹配点. AC代码: #include<bits/stdc++.h> using namespace std; #define ll long long #define M原创 2020-07-30 20:46:26 · 537 阅读 · 0 评论