Pagini recente » Cod sursa (job #200556) | Cod sursa (job #1734945) | Cod sursa (job #2227290) | Cod sursa (job #2594591) | Cod sursa (job #3268963)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("cuplaj.in");
ofstream fout ("cuplaj.out");
int n1,n2,m;
int const lmax=1e4+7;
bool viz[lmax];
vector<int> G[lmax];
int l[lmax],match[lmax];
pair <int, int> rez[lmax];
int index_rez;
bool goofy(int node)
{
if(viz[node]==true)return false;
viz[node]=true;
for(auto vec:G[node])
{
if(match[vec]==-1 or goofy(match[vec])==true)
{
l[node]=vec;
match[vec]=node;
return true;
}
}
return false;
}
int main()
{
fin>>n1>>n2>>m;
for(int i=0;i<m;i++)
{
int x,y;
fin>>x>>y;
x--;y--;
G[x].push_back(y);
G[y].push_back(x);
}
for(int i=0;i<n1;i++)
{
match[i]=-1;
}
for(int i=0;i<n2;i++)
{
l[i]=-1;
}
int change=1;
while(change)
{
for(int i=0;i<n1;i++)viz[i]=false;///initializez vectorul
change=0;
for(int i=0;i<n1;i++)
{
if(l[i]==-1)
{
change|=goofy(i);
}
}
}
for(int i=0;i<n1;i++)
{
if(match[i]!=-1)
{
rez[index_rez++]={match[i]+1,i+1};
}
}
fout<<index_rez<<"\n";
for(int i=0;i<index_rez;i++)
{
fout<<rez[i].first<<" "<<rez[i].second<<"\n";
}
return 0;
}