Cod sursa(job #577213)

Utilizator irene_mFMI Irina Iancu irene_m Data 9 aprilie 2011 21:03:03
Problema Felinare Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <cstdio>
#include <vector>
#define MaxN 9002
#define infile "felinare.in"
#define outfile "felinare.out"

using namespace std;

vector <int> G[MaxN];

int N,M,dr[MaxN],st[MaxN],uz[MaxN],s[MaxN],c;

void read()
{
      int i,x,y;

      scanf("%d%d",&N,&M);
      for(i=1;i<=M;i++)
      {
            scanf("%d%d",&x,&y);
            G[x].push_back(y);
      }
}

int pairs(int nod)
{
      if(uz[nod]) return 0;

      uz[nod]=1;
      int i;

      for(i=0;i<G[nod].size();i++)
            if(!st[G[nod][i]] || pairs(st[G[nod][i]]))
            {
                  dr[nod]=G[nod][i];
                  st[G[nod][i]]=nod;
                  return 1;
            }
      return 0;
}

void solve()
{
      int sw=1,i;

      while(sw)
      {
            sw=0;
            memset(uz,0,sizeof(uz));
            for(i=1;i<=N;i++)
                  if(!dr[i] && pairs(i))
                        sw=1;
      }
}

void write()
{
      int i;

      for(i=1;i<=N;i++)
            if(dr[i]) c++;

      printf("%d\n",2*N-c);
      for(i=1;i<=N;i++)
            printf("2\n");
}

int main()
{
      freopen(infile,"r",stdin);
      freopen(outfile,"w",stdout);

      read();
      solve();
      write();

      fclose(stdin);
      fclose(stdout);
      return 0;
}