CF_315A_Sereja and Bottles

用x[i]表示brand为i的瓶子有多少个,用y[i]表示能开brand为i的瓶子的瓶子有多少个

情况分为三种:

1、a[i]!=b[i],那么b[i]能开所有的x[a[i]]

2、a[i]==b[i]&&b[i]>1,那么b[i]能开所有的x[a[i]]

3、a[i]==b[i],那么b[i]能开x[a[i]]-1

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<queue>
using namespace std;
int a[1005],b[1005];
int x[1005],y[1005];
int main()
{
  int n;
  while(~scanf("%d",&n))
  {
      memset(x,0,sizeof(x));
      memset(y,0,sizeof(y));
      for(int i=0;i<n;++i)
      {
          scanf("%d%d",&a[i],&b[i]);
          x[a[i]]++;
          y[b[i]]++;
      }
      int sum=0;
      for(int i=0;i<n;++i)
      {
          if(x[b[i]])
        {     if(a[i]!=b[i])
            {  sum+=x[b[i]];
              x[b[i]]=0;
            }
            else if(y[a[i]]>1)
            {
                sum+=x[b[i]];
                x[b[i]]=0;
             }
            else if(x[b[i]]>1)
            {
                sum+=x[b[i]]-1;
                x[b[i]]=1;
            }
         }
      }
      printf("%d\n",n-sum);
  }
  return 0;
}

 

posted @ 2013-06-08 17:59  小仪在努力~  阅读(276)  评论(0编辑  收藏  举报