二分图的最大匹配模板
来源:互联网 发布:中文翻译藏文软件下载 编辑:程序博客网 时间:2024/06/07 08:47
//二分图的最大匹配 poj1469#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<algorithm>#include<vector>#include<cstdio>using namespace std;const int V = 500;const int E = 1000;vector<int>g[V];bool flag, vis[V];int match[V];int p, n;//二分图中左边、右边集合中顶点的数目 bool dfs(int u){for (int i = 0; i < g[u].size(); i++) {int v = g[u][i];if (!vis[v]) {vis[v] = true;if (match[v] == -1 || dfs(match[v])) {///如果i未在前一个匹配M中,或者i在匹配M中,但是从与i相邻的节点出发可以有增广路径 match[v] = u;return true;}}}return false;}int main(){int i, j, k, t, v, ans;scanf("%d", &t);while (t--){scanf("%d%d", &p, &n);for (i = 0; i < V; i++)g[i].clear();memset(match, -1, sizeof(match));flag = true;for (i = 1; i <= p; i++) {scanf("%d", &k);if (k == 0)flag = false;while (k--){scanf("%d", &v);g[i].push_back(v);}}if (flag) {ans = 0;for (i = 1; i <= p; i++) {memset(vis, false, sizeof(vis));if (dfs(i))ans++;}if (ans == p)printf("YES\n");else printf("NO\n");}}return 0;}
//邻接表实现 poj1274#include<stdio.h>#include<memory.h>#define MAX 202bool flag,visit[MAX]; //记录V2中的某个点是否被搜索过int match[MAX]; //记录与V2中的点匹配的点的编号int cow, stall; //二分图中左边、右边集合中顶点的数目int head[MAX];struct edge{ int to,next;}e[3000];int index;void addedge(int u,int v){ //向图中加边的算法,注意加上的是有向边//u为v的后续节点既是v---->u e[index].to=v; e[index].next=head[u]; head[u]=index;index++;}// 匈牙利(邻接表)算法bool dfs(int u){int i,v; for(i = head[u]; i != 0; i = e[i].next){v = e[i].to; if(!visit[v]) //如果节点v与u相邻并且未被查找过{ visit[v] = true; //标记v为已查找过 if(match[v] == -1 || dfs(match[v])) //如果i未在前一个匹配M中,或者i在匹配M中,但是从与i相邻的节点出发可以有增广路径{ match[v] = u; //记录查找成功记录,更新匹配M(即“取反”) return true; //返回查找成功 } } } return false;}int MaxMatch(){int i,sum=0;memset(match,-1,sizeof(match));for(i = 1 ; i <= cow ; ++i){memset(visit,false,sizeof(visit)); //清空上次搜索时的标记if( dfs(i) ) //从节点i尝试扩展{sum++;}}return sum;}int main(void){ int i,j,k,ans,m;while (scanf("%d %d",&cow, &stall)!=EOF){memset(head,0,sizeof(head)); //切记要初始化index = 1;for (i = 1; i <= cow; ++i){scanf("%d",&k);for (j = 0; j < k; ++j){scanf("%d",&m);addedge(i , m);}}ans = MaxMatch();printf("%d\n",ans);}return 0;}
阅读全文
0 0
- 二分图最大匹配值的模板
- 二分图的最大匹配模板
- 二分图最大匹配模板
- 二分图最大匹配模板
- [模板]-二分图最大匹配
- 二分图的判断和二分图最大匹配模板
- 二分图最大匹配 匈牙利算法 (自己写的模板)
- hdu_1507 二分图,最大匹配 原创模板!
- hdu1150 二分图最大匹配模板
- hdu3829及二分图最大匹配模板
- 二分图最大匹配(模板+题目)
- 二分图最大匹配算法模板
- 二分图最大匹配模板(匈牙利算法)
- 匈牙利算法模板 二分图最大匹配
- luogu3386【模板】二分图最大匹配
- POJ3041--二分图最大匹配模板
- 二分图的最大匹配
- 二分图的最大匹配
- 第七周项目一 顺序环形队列算法库的建立及测试
- 欢迎使用CSDN-markdown编辑器1
- 类似观察者设计模式的JS,问题总结
- Mysql-select+update并发更新问题
- SpringBoot自定义个性化的banner
- 二分图的最大匹配模板
- Base64 编解码 工具类
- 最近点对算法分析Closest Pair of Points
- IDEA Spring + websocket + tomcat项目搭建及打包部署
- RecyclerView下拉刷新上拉加载
- mvc和mvvm的区别
- 10月9日云栖精选夜读:上千家企业将空降云栖小镇,一起见证普惠科技的魅力
- Python计算机视觉里的IOU计算
- 为什么需要RPC,而不是简单的HTTP接口