Pagini recente » Cod sursa (job #995409) | Cod sursa (job #146072) | Cod sursa (job #223004) | Cod sursa (job #2144867) | Cod sursa (job #1390838)
#include <fstream>
#include <bitset>
#include <cstring>
#include <vector>
#define nmax 10005
using namespace std;
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
vector <int> v[nmax];
bitset <nmax> uz;
int lef[nmax],righ[nmax];
int n,m,e,ok,sol;
char s[15];
int cuplaj(int x)
{
int i,y;
uz[x]=1;
for (i=0;i<v[x].size();i++) {
y=v[x][i];
if (righ[y]==0) {
lef[x]=y;
righ[y]=x;
return 1;
}
}
for (i=0;i<v[x].size();i++) {
y=v[x][i];
if (uz[righ[y]]==0&&cuplaj(righ[y])) {
lef[x]=y;
righ[y]=x;
return 1;
}
}
return 0;
}
int main()
{
int i,j,x,y;
f>>n>>m;
f>>e;f.get();
for (i=1;i<=e;i++) {
f.getline(s,15);
x=y=0;
j=0;
while (s[j]-' ')
x=x*10+s[j++]-'0';
j++;
while (s[j]!=NULL)
y=y*10+s[j++]-'0';
memset(s,0,sizeof(s));
v[x].push_back(y);
}
do {
uz.reset();
ok=0;
for (i=1;i<=n;i++)
if (lef[i]==0&&cuplaj(i))
ok=1;
} while (ok);
sol=0;
for (i=1;i<=n;i++)
if (lef[i])
sol++;
g<<sol<<'\n';
for (i=1;i<=n;i++)
if (lef[i])
g<<i<<' '<<lef[i]<<'\n';
return 0;
}