ZOJ 1134 - Strategic Game

 1  /*  Accepted 1134 C++ 00:07.71 9716K  */
 2  #include  < stdio.h >
 3  #include  < iostream >
 4 
 5  using   namespace  std;
 6  const   int  N  =   1500 ;
 7 
 8  struct  {  int  cnt, son[ 1500 ]; } Tree[ 1500 ];
 9 
10  int  f[ 1500 ][ 2 ];
11  void  PostOrder( int  p)
12  {
13       if (Tree[p].cnt  ==   0 )
14      {
15          f[p][ 0 =   0 ;
16          f[p][ 1 =   1 ;
17           return ;
18      }
19       for ( int  i  =   0 ; i  <  Tree[p].cnt; i ++ )
20          PostOrder(Tree[p].son[i]);
21      
22      f[p][ 1 ] ++ ;
23       for ( int  i  =   0 ; i  <  Tree[p].cnt; i ++ )
24      {
25          f[p][ 0 +=  f[Tree[p].son[i]][ 1 ];
26          f[p][ 1 +=  min(f[Tree[p].son[i]][ 0 ], f[Tree[p].son[i]][ 1 ]);
27      }
28  }
29 
30  int  main()
31  {
32       int  n;
33       while (cin  >>  n)
34      {
35          memset(Tree,  0 sizeof (Tree));
36          memset(f,  0 sizeof (f));
37          
38           int  s, m  =   0 ;
39           bool  x[ 1500 =  { false };
40           for ( int  i  =   0 ; i  <  n; i ++ )
41          {
42              scanf( " %d:(%d) " & s,  & m);
43               for ( int  i  =   0 ; i  <  m; i ++ )
44              {
45                  Tree[s].cnt  =  m;
46                  cin  >>  Tree[s].son[i];
47                  x[Tree[s].son[i]]  =   true ;
48              }
49          }
50           int  root;
51           for ( int  i  =   0 ; i  <  n; i ++ )
52               if (x[i]  ==   false )
53              {
54                  root  =  i;
55                   break ;
56              }
57          
58          PostOrder(root);
59          
60          cout  <<  min(f[root][ 0 ], f[root][ 1 ])  <<  endl;
61      }
62      
63       return   0 ;
64  }
65 

你可能感兴趣的:(ZOJ 1134 - Strategic Game)