当前位置: 首页 > news >正文

二分图最大匹配 输出具体方案

洛谷P2756

匈牙利算法:

#include<bits/stdc++.h>
using namespace std;
const int N=110;
int match[N],vis[N];
int n,m;
vector<int> edges[N];
bool dfs(int u){for(int &v:edges[u]){if(vis[v])continue;vis[v]=true;if(!match[v]||dfs(match[v])){match[v]=u;return 1;}}return 0;
}
int main(){cin.tie(nullptr)->sync_with_stdio(false);cin>>m>>n;int u,v;while(cin>>u>>v,~u&&~v){edges[u].push_back(v);}int ans=0;for(int i=1;i<=m;i++){memset(vis,0,sizeof(vis));if(dfs(i))ans++;}cout<<ans<<endl;for(int i=m+1;i<=n;i++){if(match[i])cout<<match[i]<<' '<<i<<endl;}return 0;
}

dinic算法:

#include<bits/stdc++.h>
using namespace std;
const int N=110,M=((N*N)<<1)+(N<<1);
typedef long long LL;
struct edge{LL v,c,ne;}e[M];
int h[N],cur[N],dep[N],id=1;
int n,m,s,t;void add(int u,int v,int c){e[++id]={v,c,h[u]};h[u]=id;
}bool bfs(){memset(dep,0,sizeof(dep));queue<int> q;q.push(s);dep[s]=1;while(q.size()){int u=q.front();q.pop();for(int i=h[u];i;i=e[i].ne){int v=e[i].v;if(dep[v]==0&&e[i].c){dep[v]=dep[u]+1;q.push(v);if(v==t)return true;}}}return false;
}LL dfs(int u,LL mf){if(u==t)return mf;LL sum=0;for(int i=cur[u];i;i=e[i].ne){cur[u]=i;int v=e[i].v;if(dep[v]==dep[u]+1&&e[i].c){int f=dfs(v,min(mf,e[i].c));sum+=f;mf-=f;e[i].c-=f;e[i^1].c+=f;if(mf==0)break;}}if(sum==0)dep[u]=0;return sum;
}LL dinic(){LL flow=0;while(bfs()){memcpy(cur,h,sizeof(h));flow+=dfs(s,1e9);}return flow;
}int main(){cin.tie(nullptr)->sync_with_stdio(false);cin>>m>>n;int u,v;while(cin>>u>>v,~u&&~v){add(u,v,1);add(v,u,0);}s=0,t=n+1;for(int i=1;i<=m;i++){add(s,i,1);add(i,s,0);}for(int i=m+1;i<=n;i++){add(i,t,1);add(t,i,0);}cout<<dinic()<<endl;for(int u=1;u<=m;u++){for(int i=h[u];i;i=e[i].ne){int v=e[i].v;if(e[i].c||v==0)continue;else{cout<<u<<' '<<v<<endl;break;}}}return 0;
}

EK算法:

#include<bits/stdc++.h>
using namespace std;
const int N=110,M=((N*N)<<1)+(N<<1);
typedef long long LL;
struct edge{LL v,c,ne;}e[M];
int h[N],id=1,mf[N],pre[N];
int n,m,s,t;void add(int u,int v,int c){e[++id]={v,c,h[u]};h[u]=id;
}bool bfs(){memset(mf,0,sizeof(mf));queue<int> q;q.push(s);mf[s]=1e9;while(q.size()){int u=q.front();q.pop();for(int i=h[u];i;i=e[i].ne){int v=e[i].v;if(mf[v]==0&&e[i].c){mf[v]=min(1ll*mf[u],e[i].c);pre[v]=i;q.push(v);if(v==t)return true;}}}return false;
}LL EK(){LL flow=0;while(bfs()){int v=t;while(v^s){int i=pre[v];e[i].c-=mf[t];e[i^1].c+=mf[t];v=e[i^1].v;}flow+=mf[t];}return flow;
}int main(){cin.tie(nullptr)->sync_with_stdio(false);cin>>m>>n;int u,v;while(cin>>u>>v,~u&&~v){add(u,v,1);add(v,u,0);}s=0,t=n+1;for(int i=1;i<=m;i++){add(s,i,1);add(i,s,0);}for(int i=m+1;i<=n;i++){add(i,t,1);add(t,i,0);}cout<<EK()<<endl;for(int u=1;u<=m;u++){for(int i=h[u];i;i=e[i].ne){int v=e[i].v;if(e[i].c||v==0)continue;else{cout<<u<<' '<<v<<endl;break;}}}return 0;
}
http://www.sczhlp.com/news/172940/

相关文章:

  • 中科 网站会员注册系统建设wordpress使用cdn菜单消失
  • 网站做的好久久建筑网会员登录没有签到得金币了吗
  • 南宁网站建设公网站后台账户密码
  • 网站建设 中企动力 顺德中国空间站天宫课堂
  • 邢台网站建设哪家专业北京市朝阳区网站制作公司
  • 名片式网站模板品牌广告视频
  • 织梦网站源码转换成wordpress中小企业网站制作过程中要注意什么
  • 如何建导航网站珠海做网站最好的公司有哪些
  • 网站规划与建设的流程与方法 高中信息技术给网站做公正需要带什么
  • 建设网站后如何上线高端网站建设设计公司哪家好
  • 国外订房网站怎么和做河南省建设集团有限公司网站
  • pc网站优化排名软件网站开发 外包公司
  • 学网站设计淘宝关键词排名
  • 惠州个人做网站联系人seo短视频网页入口引流怎么做
  • 做哪个网站最简单励志网站织梦源码
  • 单页网站 jquery农业公司网站建设方案
  • 网站建设czzmcn网站后台挂马怎么处理
  • 老板让我做网站负责人wordpress同步微博内容
  • 建设部人才中心网站网站文档怎么加图片不显示不出来
  • 网站开发图片文字平面设计app软件有哪些
  • 如何做网站维护京东客网站怎么做的
  • 桂林市自来水公司网站做网站绿色和什么颜色搭配
  • 爱爱做网站网站怎么做seo排名
  • 快站心动小程序官网网站和公众号的区别是什么意思
  • 济南网站建设专业wordpress批量提交rss
  • 2025多校冲刺CSP模拟赛4 总结
  • 多路归并、败者树、置换-选择排序、最佳归并树
  • 地球科学概论
  • php网站源码怎么在本地电脑调式黄金网站网址免费
  • 留号码的广告网站济南市网站建设企业