首页 > 代码库 > BZOJ1191 超级英雄Hero (匈牙利算法)
BZOJ1191 超级英雄Hero (匈牙利算法)
直接跑匈牙利,注意到“只有当选手正确回答一道题后,才能进入下一题,否则就被淘汰”,一旦无法满足就直接退出。
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 (匈牙利算法)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。