Pagini recente » Cod sursa (job #819607) | Cod sursa (job #199598) | Cod sursa (job #2199667) | Cod sursa (job #1898638) | Cod sursa (job #1980355)
#include <bits/stdc++.h>
#define Nmax 10001
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
bool viz[Nmax];
bitset <Nmax> valid;
bitset <Nmax> candidat;
list <int> G[Nmax];
list < pair <int,int> > sol;
int t[Nmax];
int main()
{
int n,m,nr,i,j,k;
f>>n>>m>>nr;
for(int con=1;con<=nr;con++)
{
f>>i>>j;
G[i].push_back(j);
}
int n1=n,n2=m;
k=0;
while(n1 and n2)
{
list <int> :: iterator it;
fill(viz+1,viz+m+1,false);
for(i=1;i<=n;i++)
if(!valid[i])
for(it=G[i].begin();it!=G[i].end();it++)
if(!viz[*it])
{
viz[*it]=true;
t[*it]=i;
}
for(i=1;i<=m;i++)
if(!candidat[i] and !valid[t[i]])
{
candidat[i]=true;
valid[t[i]]=true;
k++;
sol.push_back({t[i],i});
n1--;
n2--;
}
}
g<<k<<'\n';
list < pair <int,int> > :: iterator itt;
for(itt=sol.begin();itt!=sol.end();itt++)
g<<itt->first<<' '<<itt->second<<'\n';
return 0;
}