pku1463 Strategic game

http://poj.org/problem?id=1463

DP,树状DP,或二分图匹配

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <vector>
 5 using namespace std;
 6 
 7 const int N = 1505;
 8 
 9 int pre[N];
10 bool flag[N];
11 vector<int> map[N];
12 int n;
13 
14 int find(int x)
15 {
16     int i, k;
17     for(i = 0; i < map[x].size(); i++)
18     {
19         k = map[x][i];
20         if(!flag[k])
21         {
22             flag[k] = true;
23             if(pre[k] == -1 || find(pre[k]))
24             {
25                 pre[k] = x;
26                 return 1;
27             }
28         }
29     }
30     return 0;
31 }
32 
33 int main()
34 {
35     int i, j, r, k, num, sum;
36     while(scanf("%d", &n) != EOF)
37     {
38         memset(pre, -1, sizeof(pre));
39         for(i = 0; i < n; i++) map[i].clear();
40         for(i = 0; i < n; i++)
41         {
42             scanf("%d:(%d)", &k, &num);
43             for(j = 0; j < num; j++)
44             {
45                 scanf("%d", &r);
46                 map[k].push_back(r);    //用邻接表
47                 map[r].push_back(k);    //建双向图
48             }
49         }
50         sum = 0;
51         for(i = 0; i < n; i++)
52         {
53             memset(flag, false, sizeof(flag));
54             sum += find(i);
55         }
56         printf("%d\n", sum/2);
57     }
58     return 0;
59 }

 

转载于:https://www.cnblogs.com/yuan1991/archive/2013/05/23/pku1463.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值