題目
題目背景
小Z今天和小夥伴們一起去畢業游到遊樂場玩,終於可以坐上夢寐以求的海盜船了。
題目描述
海盜船的每一排只有兩個座位,爲了安全起見,每個女生必須與一個男生坐一排。但是,每個人都希望與自己認識的人坐在一起。請問如何安排座位才能讓更多的人滿意呢?小Z的小夥伴們實在是太多了。
輸入輸出格式
輸入格式:
第一行:兩個數n和m,分別表示n個人和m個關係。
以下m行:每行兩個數Mi,Mj,1<=Mi,Mj<=N,表示Mi和Mj具有關係。
輸出格式:
找出全部符合,然後輸出符合數最多的。
輸入輸出樣例
輸入樣例
6 5
1 4
1 5
2 5
2 6
3 4
輸出樣例
3
說明
1≤n,m≤10000
題解
#include <cstdio>
#define ll long long
ll book[10001];
ll match[10001];
bool e[101][101];
ll ans=0,n=0,m=0;
bool dfs(ll u)
{
for(ll i=1;i<=n;i++)
{
if(book[i]==0 && e[u][i]==true)
{
book[i]=1;
if(match[i]==0 || dfs(match[i])==true)
{
match[u]=i;
match[i]=u;
return true;
}
}
}
return false;
}
int main()
{
scanf("%lld %lld",&n,&m);
for(ll i=1;i<=m;i++)
{
ll x=0,y=0;
scanf("%lld %lld",&x,&y);
e[x][y]=true;
e[y][x]=true;
}
for(ll i=1;i<=n;i++)
{
for(ll j=1;j<=n;j++)
{
book[j]=0;
}
if(dfs(i)==true)
{
ans++;
}
}
printf("%lld",ans);
return 0;
}