Pagini recente » Istoria paginii runda/pla/clasament | Cod sursa (job #807710) | Cod sursa (job #1066114) | Istoria paginii runda/tamasforthewin | Cod sursa (job #1790120)
#include <iostream>
#include<fstream>
#include<vector>
using namespace std;
const int nmax=10005;
vector<int> v[nmax];
int l[nmax],r[nmax];
bool viz[nmax];
int n,m,e,i,x,y,E,cuplaj;
bool change;
bool pairup(int x)
{
if(viz[x]==1) return 0;
viz[x]=1;
for(int j=0;j<v[x].size();j++)
{
int node=v[x][j];
if(r[node]==0||pairup(r[node]))
{
l[x]=node;
r[node]=x;
return 1;
}
}
return 0;
}
int main()
{
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
f>>n>>m>>E;
for(i=1;i<=E;i++)
{
f>>x>>y;
v[x].push_back(y);
}
change=1;
while(change)
{
change=0;
for(i=1;i<=n;i++)
viz[i]=0;
for(i=1;i<=n;i++)
{
if(l[i]==0&&pairup(i))
change=1;
}
}
for(i=1;i<=n;i++)
if(l[i]!=0) cuplaj++;
g<<cuplaj<<'\n';
for(i=1;i<=n;i++)
if(l[i])
g<<i<<' '<<l[i]<<'\n';
return 0;
}