码迷,mamicode.com
首页 > 编程语言 > 详细

BZOJ1191 超级英雄Hero (匈牙利算法)

时间:2014-12-22 21:01:27      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

直接跑匈牙利,注意到“只有当选手正确回答一道题后,才能进入下一题,否则就被淘汰”,一旦无法满足就直接退出。

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 #define maxn 2008
 5 #define maxm 10008
 6 
 7 struct edge{
 8     int u,v,next;
 9 }eg[maxm];
10 
11 int n,m,sum;
12 int last[maxn],l[maxn];
13 bool pd[maxn];
14 
15 void add(int u,int v)
16 {
17     eg[++sum].u=u;
18     eg[sum].v=v;
19     eg[sum].next=last[u];
20     last[u]=sum;
21 }
22 bool find(int u)
23 {
24     for (int i=last[u];i;i=eg[i].next)
25     {
26         int v=eg[i].v;
27         if (!pd[v])
28         {
29             pd[v]=true;
30             if ( (!l[v]) || find(l[v]) )
31             {
32                 l[v]=u;
33                 return true;
34             }
35             
36         }
37     }
38     return false;
39 }
40 int main()
41 {
42     scanf("%d%d",&n,&m);
43     int i,j,sum=0,ans=0;
44     for(i=1;i<=m;i++)
45     {
46         scanf("%d",&j);
47         add(i,j);
48         scanf("%d",&j);
49         add(i,j);
50     }
51     
52     memset(l,0,sizeof(l));
53     for (i=1;i<=m;i++)
54     {
55         memset(pd,0,sizeof(pd));
56         if (find(i)) ans++; else break; 
57     }
58     printf("%d",ans);
59 }

 

BZOJ1191 超级英雄Hero (匈牙利算法)

标签:

原文地址:http://www.cnblogs.com/rpSebastian/p/4178878.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!