题目
题目背景
小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;
}