Cod sursa(job #1451660)

Utilizator rangerChihai Mihai ranger Data 17 iunie 2015 23:30:34
Problema Cuplaj maxim in graf bipartit Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<fstream>
#include<vector>

using namespace std;

ifstream cin("cuplaj.in");
ofstream cout("cuplaj.out");

const int N = 10002;

int n,k,i,j,m;
vector<int> g[N];
vector<int> L(N,0), R(N,0), used(N,0);


int dfs(int v)
{
    if (used[v]) return 0;
    used[v]=1;
    for (int i=0;i<g[v].size();i++)
    {
        int to=g[v][i];
        if (!R[to] || dfs(R[to]))
        {
            R[to]=v;
            L[v]=to;
            return 1;
        }
    }
    return 0;
}

int main()
{
    cin>>n>>k>>m;

    while (m--)
    {
        int x,y;
        cin>>x>>y;
        g[x].push_back(y);
    }

    for (i=1;i<=n;i++)
        for (j=0;j<g[i].size();j++)
      if (R[g[i][j]]==0)
      {
          R[g[i][j]]=i;
          L[i]=g[i][j];
          break;
      }

      for (i=1;i<=n;i++)
      {
          if (L[i]) continue;
           used.assign(n+1,0);
          dfs(i);
      }

      int ans=0;
      for (i=1;i<=n;i++)if (L[i])ans++;
      cout<<ans<<'\n';

      for (i=1;i<=n;i++)if (L[i]) cout<<i<<' '<<L[i]<<'\n';

      return 0;
}