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;

}

 

你可能感兴趣的:(BO)