Problema nu exista
Cod sursa(job #2642455)
| Utilizator | Data | 15 august 2020 13:28:15 | |
|---|---|---|---|
| Problema | Cuplaj maxim in graf bipartit | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.19 kb |
#include <fstream>
#include <algorithm>
using namespace std;
int n,m,q,i,ok,nr,ap[100005],st[100005],dr[100005];
vector <int> v[100005];
bool pot(int x)
{
if(ap[x]) return 0;
int y=0;
ap[x]=1;
for(int ii=1; ii<=v[x][0]; ii++)
{
y=v[x][ii];
if(st[y]==0)
{
dr[x]=y;
st[y]=x;
return 1;
}
}
for(int ii=1; ii<=v[x][0]; ii++)
{
y=v[x][ii];
if(pot(st[y]))
{
dr[x]=y;
st[y]=x;
return 1;
}
}
return 0;
}
int main()
{
ifstream f("cuplaj.in");
ofstream g("cuplaj.out");
f>>n>>m>>q;
for(i=1; i<=n; i++) v[i].push_back(0);
for(i=1; i<=q; i++)
{
int x,y;
f>>x>>y;
v[x][0]++;
v[x].push_back(y);
}
ok=1;
while(ok)
{
ok=0;
for(i=1; i<=n; i++) ap[i]=0;
for(i=1; i<=n; i++)
if(dr[i]==0&&pot(i)==1)
{
ok=1;
nr++;
}
}
g<<nr<<'\n';
for(i=1; i<=n; i++)
{
if(dr[i]) g<<i<<" "<<dr[i]<<'\n';
}
return 0;
}
