HDU 5090 Game with Pearls

Posted BBBob

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 5090 Game with Pearls相关的知识,希望对你有一定的参考价值。

题目地址

二分图最大匹配,将1-n分为二分图的一边,编号1-n为另一边,当编号1-n中的数字加0或k的整数倍为j(j<=n)的时候将编号i与j相连。

如此,这个二分图中如果最大匹配数为n,则Jerry赢,否则Tom赢。

 1 #include<stdio.h>
 2 #include<algorithm>
 3 using namespace std;
 4 const int Nmax=305;
 5 int t,n,k,x,ans;
 6 int match[Nmax],book[Nmax],map[Nmax][Nmax];
 7 int init()
 8 {
 9     ans=0;
10     for(int i=1;i<=n;i++)
11         for(int j=1;j<=n;j++)
12             map[i][j]=0;
13     for(int i=1;i<=n;i++)
14         match[i]=book[i]=0;
15 }
16 
17 int dfs(int u)
18 {
19     for(int i=1;i<=n;i++)
20     {
21         if(map[i][u] && !book[i])
22         {
23             book[i]=1;
24             if(!match[i] || dfs(match[i]))
25             {
26                 match[i]=u;
27                 return 1;
28             }
29         }
30         
31     }
32     return 0;
33 }
34 
35 int main()
36 {
37     scanf("%d",&t);
38     while(t--)
39     {
40         scanf("%d%d",&n,&k);
41         init();
42         for(int i=1;i<=n;i++)
43         {
44             scanf("%d",&x);
45             for(int j=x;j<=n;j+=k)
46                 map[j][i]=1;
47         }
48         for(int i=1;i<=n;i++)
49         {
50             for(int j=1;j<=n;j++) book[j]=0;
51             if(dfs(i))
52                 ans++;
53         }
54         if(ans==n)
55             printf("Jerry\n");
56         else
57             printf("Tom\n");
58     }
59     return 0;
60 }

 

以上是关于HDU 5090 Game with Pearls的主要内容,如果未能解决你的问题,请参考以下文章

HDU6684 Rikka with Game

HDU-6500 Problem A. Game with string

hdu 1300 Pearls(dp)

HDU1300 Pearls

@hdu - 5009@ Paint Pearls

AC日记——Paint Pearls hdu 5009