poj 1463 Strategic game

最小支配集,题目不难,就是它给出数据的方式有点CD。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 1505
 4 int to[N][12];
 5 int all[N],dp[N];
 6 bool root[N];
 7 int min(int a,int b)
 8 {
 9     return a<b ?a :b;
10 }
11 void dfs(int u)
12 {
13     int v,i,cnt=0;
14     dp[u] = 1;
15     all[u] = 0;
16     for(i = 1; i <= to[u][0]; i++)
17     {
18         v = to[u][i];
19         dfs(v);
20         dp[u] += all[v];
21         cnt += dp[v];
22     }
23     all[u] = min(dp[u],cnt);
24 }
25 int main()
26 {
27     int n,a,b,i,t;
28     while(~scanf("%d",&n))
29     {
30         memset(root,1,N);
31         while(n--)
32         {
33             scanf("%d:(%d)",&a,&b);
34             to[a][0] = b;
35             for(i = 1; i <= b; i++)
36             {
37                 scanf("%d",&t);
38                 to[a][i] = t;
39                 root[t] = 0;
40             }
41         }
42         for(i = 0; !root[i]; i++);
43         dfs(i);
44         printf("%d\n",all[i]);
45     }
46     return 0;
47 }
原文地址:https://www.cnblogs.com/lzxskjo/p/2761654.html