杭電2063 二分匹配匈牙利演算法
#include<stdio.h>
#include<string.h>
#define MAX 600
int pos[MAX][MAX],match[MAX],dian[MAX];
main()
{
int a,b,M,N,K,i,count;
while(scanf("%d",&K)!=EOF && K!=0)
{
count=0;
scanf("%d %d",&M,&N);
memset(pos,0,sizeof(pos)); //將所有元素置零,pos[i][j]=1表示女生i與男生j可匹配
memset(match,0,sizeof(match)); //match[i]=j表示男生i與女生j已經匹配
memset(dian,0,sizeof(dian)); //dian[i]=1表示該點已經被訪問過。
for(i=0;i<K;i++)
{
scanf("%d %d",&a,&b);
pos[a][b]=1;
}
for(i=1;i<=M;i++) //①對每個女生(接下①)
{
memset(dian,0,sizeof(dian)); //已訪問點重置
if(find(i,N)!=0) count++;
}
printf("%d\n",count);
}
}
int find(int start,int N)
{
int i;
for(i=1;i<=N;i++) //①遍歷所有男生
{
if(pos[start][i]==1 && dian[i]==0) // 如果雙方有匹配意願,且該點未訪問,訪問該點
{
dian[i]=1;
if(match[i]==0 || find(match[i],N)!=0) //如果男方i目前未匹配 或者 已經匹配,但是能重新給j(match[i]=j)女生分配i男生以外的男生,因為此時dian【i】=1,所以不會再次匹配j與i。
{
match[i]=start; //則匹配i男生與start女生,j女生此時與另外一男匹配
return 1; //匹配成功返回 1
}
}
}
return 0; // 匹配失敗返回0
}
相關推薦
杭電2063 二分匹配匈牙利演算法
#include<stdio.h> #include<string.h> #define MAX 600 int pos[MAX][MAX],match[MAX],dian[MAX]; main() { int a,b,M,N,K,i,co
HDU 1083 Courses 二分匹配匈牙利演算法模板
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1083 Problem Description Consider a group of N students and P courses. Each student visits
二分匹配——匈牙利演算法和KM演算法
一、二分圖 定義:若把簡單圖G的頂點集分成兩個不相交的非空集合V1和V2,使得圖中每一條邊都連線V1中的一個頂點和V2中的一個頂點(邊的兩個端點一個在V1中,另一個在V2中),則圖G稱為二分圖,此時稱(V1,V2)為G的頂點集的一個二部劃分。 什麼是簡單圖?
2063】(二分最大匹配—匈牙利演算法)
題目: RPG girls今天和大家一起去遊樂場玩,終於可以坐上夢寐以求的過山車了。可是,過山車的每一排只有兩個座位,而且還有條不成文的規矩,就是每個女生必須找個個男生做partner和她同坐。但是,每個女孩都有各自的想法,舉個例子把,Rabbit只願意和XHD或PQK做p
二分圖匹配 匈牙利演算法 模版
/* 匈牙利演算法鄰接表形式 使用前用init()進行初始化,給uN賦值 加邊使用函式addedge(u,v) */ const int MAXN=5010;//點數的最大值 const int MAXM=50010;//比數的最大值 struct Edge { int to,next; }e
【二分圖匹配/匈牙利演算法】飛行員配對方案問題
P2756 飛行員配對方案問題 確認過眼神, 是二分圖匹配板子題啦!!! 跑個匈牙利, 有匹配的輸出, 記得先輸出外籍飛行員, 因為有spj順序無所謂啦qwq 最近A的最順利的題了哈哈哈哈哈哈開心!!!!!!!! 1 #include<cstdio> 2 #incl
二分圖最大匹配 匈牙利演算法的簡單理解
(本文圖片及被*標註內容來自CSDN部落格:pi9nc) 基本概念—二分圖 二分圖:是圖論中的一種特殊模型。若能將無向圖G=(V,E)的頂點V劃分為兩個交集為空的頂點集,並且任意邊的兩個端點都分屬於兩個集合,則稱圖G為一個為二分圖。 匹配:一個匹配即一個包含若干條邊的集合,且其中任
hdu4619 Warm up 2 二分圖匹配匈牙利演算法
今天晚上學了一下神奇的匈牙利演算法QwQ 題的大意是給出許多1*2和2*1的塊的座標,保證1*2的塊之間、2*1的塊之間沒有重疊,問最多有幾個塊互不重疊。 首先建立一個二分圖,如果兩個塊重疊就在它們所代表的點之間畫一條邊,然後用匈牙利演算法求出二分圖的最大匹配,答案就
要成為魔法少女嗎!!1681(二分圖匹配——匈牙利演算法模板題)
題目描述 酸奶醬是一位魔法少女,並且她很熱衷於點化她的其他小夥伴和她一起成為魔法少女。 現在有一個棘手的問題擺在酸奶醬面前——她有M套成為魔法少女不可缺少的魔法戰鬥服,以及N個想成為魔法少女的小夥伴。魔法戰鬥服是有靈性的,它有想要跟隨的主人。酸奶醬想盡可能多的把更多的魔法戰鬥服分給她的小夥伴,她現在想知道
過山車 (二分圖最大匹配 匈牙利演算法)
開始時比較難理解的演算法 原題:過山車 題意:n個女生,m個男生,每個女生都有幾個固定的可以搭配的男生,有k組搭配總共,輸入a,b代表a女生可以和b男生搭配,問最後最多有幾對搭配。 先附程式碼: int head_g[N]; int now_g;
1150 Machine Schedule 最小點覆蓋(最大二分圖匹配-匈牙利演算法)鄰接表寫法
日! 最近 CF 做的多了,再做多組輸入的題的時候 忘記陣列清空,,然後wa了 好久。。。 我就說嗎。。。這麼裸的匈牙利怎麼會出錯呢? ——————————————————————分割 這個題是最小點覆蓋問題,畫出圖來以後可以知道是找最少的點覆蓋所有邊,每個點覆蓋它相連的邊
圖論演算法----二分圖匹配----匈牙利演算法詳解
一、一些相關概念 1、二分圖的概念: 二分圖又稱作二部圖,是圖論中的一種特殊模型。 設G=(V,E)是一個無向圖。 如果頂點集V可分割為兩個互不相交的子集X和Y,並且圖中每條邊連線的兩個頂點一個在X
二分圖的最大匹配 匈牙利演算法
幾種概念: 二分圖:是圖論中的一種特殊模型。若能將無向圖G=(V,E)的頂點V劃分為兩個交集為空的頂點集,並且任意邊的兩個端點都分屬於兩個集合,則稱圖G為一個為二分圖。可以想象一下離散數學中的二部圖。 匹配:一個匹配即一個包含若干條邊的集合,且其中任意兩
1463 Strategic game 最小點覆蓋(二分圖匹配-匈牙利演算法)
最小點覆蓋問題 也是匹配問題 這裡用到了 匈牙利演算法, 還用到了結構體陣列存鄰接表的做法 **之前錯誤理解為最小邊覆蓋,6個點的鏈就卡到了邊覆蓋想法 #include <iostream> #include <cstdio> #i
二分圖匹配——匈牙利演算法和KM演算法
二分圖的概念 二分圖又稱作二部圖,是圖論中的一種特殊模型。 設G=(V, E)是一個無向圖。如果頂點集V可分割為兩個互不相交的子集X和Y,並且圖中每條邊連線的兩個頂點一個在X中,另一個在Y中,則稱圖G為二分圖。 二分圖的性質 定理:當且僅當無向圖
二分圖的最大匹配匈牙利演算法和最小支配集
求二分圖最大匹配(指派問題)的匈牙利演算法: 談匈牙利演算法自然避不開Hall定理,即是:對於二部圖G,存在一個匹配M, 使得X的所有頂點關於M飽和的充要條件是:對於X的任意一個子集A,和A鄰接的點集為T(A),恆有: |T(A)| > = |A|
二分圖匹配相關演算法及例題分析 最大匹配匈牙利演算法 最大權匹配KM演算法(二分圖型別問題彙總)
二分圖最大匹配: 問題描述:給出一個二分圖,找一個邊數最大的匹配。就是選擇儘量多的邊,使得選中的邊中任意兩條邊均沒有公共點。如果所有的點都是匹配點那就是一個完美匹配。 解決方案:增廣路定理 增廣
HDU4185 Oil Skimming(二分圖匹配,匈牙利演算法)
Problem Description Thanks to a certain “green” resources company, there is a new profitable industry of oil skimming. There
(通俗易懂小白入門)二分圖最大匹配——匈牙利演算法
二分圖 先介紹一下什麼是二分圖,二分圖也叫二部圖,設G=(V,E)是一個無向圖,如果頂點V可分割為兩個互不相交的子集(A,B),並且圖中的每條邊(i,j)所關聯的兩個頂點i和j分別屬於這兩個不同的頂點集(i in A,j in B),則稱圖G為一個二分圖,如下圖所有的頂點可以分成A,B兩個集合,而
hdu-1150(二分圖+匈牙利演算法)
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1150 思路:題目中給出兩個機器A,B;給出k個任務,每個任務可以由A的x狀態或者B的y狀態來完成。 完成任務的順序可以任意改變,每次改變一次狀態需要重啟一次機器。 將每個狀態看做一個點,每個任務看做兩個狀態