zoukankan      html  css  js  c++  java
  • hdu 2063 过山车

    http://acm.hdu.edu.cn/showproblem.php?pid=2063(这是一道中文题,题目就不说了,自己读。)

    这是做的第一道二分匹配的题,直接套匈牙利算的模板,直接ac。不过重要的是里面有很多重要的图论的知识,但是自己理解的还不是很透彻,所以写不出来,也不想拿别人,先放着吧,改天写。

    下面是ac的。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 using namespace std;
     6 int vis[505],cmp[505][505];//vis记录在当前第u个女生的情况下,是否被挑选过;cmp是记录女生和男生的关系;
     7 int cm[505];//cm[i]=u,表示第i个男生和第u个女生配对;
     8 int k,m,n;
    //传进来的是女生的编号。如果能当前女生和前面的女生有喜欢的相同的男生,
    //就让前面的女生去找另外的男生,如果实在找不到就返回。
     9 int inint(int u)
    10 { 11 for(int i=1; i<=n; i++) 12 { 13 if(cmp[u][i]&&!vis[i]) 14 { 15 vis[i]=1; 16 if(!cm[i]||inint(cm[i])) 17 { 18 cm[i]=u; 19 return 1; 20 } 21 } 22 } 23 return 0; 24 } 25 int main() 26 { 27 int a,b,sum; 28 while(scanf("%d",&k)==1,k!=0) 29 { 30 scanf("%d%d",&m,&n); 31 memset(cmp,0,sizeof(cmp)); 32 for(int i=0; i<k; i++) 33 { 34 scanf("%d%d",&a,&b); 35 cmp[a][b]=true; 36 } 37 memset(cm,0,sizeof(cm)); 38 sum=0; 39 for(int i=1; i<=m; i++)//i表示女生的编号 40 { 41 memset(vis,0,sizeof(vis));//每一个女生都要重新任意挑选男生 42 if(inint(i)) sum++;// 43 } 44 printf("%d ",sum); 45 } 46 return 0; 47 }
  • 相关阅读:
    神马搜索 面试小结
    我的第一篇paper
    【转载】技巧:Vim 的纵向编辑模式
    实习求职小结
    将博客园界面打造成Hexo经典主题Light
    试一下Markdown
    四色标记算法
    射雕三部曲的优美片段
    Docker
    Sublime Text 3 文档
  • 原文地址:https://www.cnblogs.com/zzulipomelo/p/4839884.html
Copyright © 2011-2022 走看看