【HDU 2063】【二分図最大マッチング】ジェットコースター
一晩中振り回されてこれを1つ作った.の明日の実験室の問題はまだ出ていません.あさっては友达とVOJを約束して、土曜日にBCにサインします.ああああああああああああああああああああああああああああああああああああああああああ
もともと见たかったんですが、アルゴリズムを见て、烦わしくて、直接基础题を作って、Dark_を见ました.Scope大牛の趣はアルゴリズムを書きます—ハンガリーのアルゴリズムを書いて、黙々としてA 1題を書いて、1つの印象があります.
明日はデータ構造と結びつけてみましょう.そして最初にlineを-1.に初期化します.結局WAWAWAWAWA..falseの値は0000000!!!一晩中私を荒廃させます!!
もともと见たかったんですが、アルゴリズムを见て、烦わしくて、直接基础题を作って、Dark_を见ました.Scope大牛の趣はアルゴリズムを書きます—ハンガリーのアルゴリズムを書いて、黙々としてA 1題を書いて、1つの印象があります.
明日はデータ構造と結びつけてみましょう.そして最初にlineを-1.に初期化します.結局WAWAWAWAWA..falseの値は0000000!!!一晩中私を荒廃させます!!
#include "iostream"
#include "cmath"
#include "algorithm"
using namespace std;
#define Max 1000
int boy[Max];
bool line[Max][Max];
bool used[Max];
int num,gnum,bnum;
int find (int x);
int main(int argc, char const *argv[])
{
while(~scanf("%d",&num) && num)
{
scanf("%d %d",&gnum,&bnum);
memset(line,false,sizeof(line));
memset(boy,-1,sizeof(boy));
int ans=0;
for (int i = 1; i <= num; ++i)
{
int a,b;
scanf("%d %d",&a,&b);
line[a][b]=true;
}
for (int i = 1; i <= gnum; ++i)//0 , 1 ,
{
memset(used,false,sizeof(used));
if(find(i)) ans++; // a
}
printf("%d
",ans);
}
return 0;
}
int find(int x)
{
for (int i = 1; i <= bnum; ++i)// 。
{
if(!used[i] && line[x][i])
{
used[i]=true;
if(boy[i] == -1 || find(boy[i]))//
{
boy[i] = x;// i x
return 1;
}
}
}
return 0;
}