zoukankan      html  css  js  c++  java
  • POJ 1274 The Perfect Stall

    一个很明显的最大二分匹配!

    尽管很明显,但我还是想了一会儿……

    为什么?因为我有点忘了它的实现,又想了一会儿,代码敲出来,测试样例数据时,出不来结果~

    调试说是栈溢出。。。我又分析了代码。。。确实有问题!缺少标记!!!

    最终又加了个no[N]数组,提交才AC!

    View Code
    #include <stdio.h>
    #include <string.h>

    #define M 40002
    #define N 202

    int nodev[N];
    int nodeu[M],next[M];
    int pre[N];
    bool no[N];

    void Build_Graph(int n,int m)
    {
    int v,u,num,ind;
    memset(nodev,-1,sizeof(nodev)); ind=0;

    for(v=1;v<=n;v++)
    {
    scanf("%d",&num);
    while(num--)
    {
    scanf("%d",&u);

    nodeu[ind]=u;
    next[ind]=nodev[v];
    nodev[v]=ind;
    ind++;
    }
    }
    }

    bool find(int v)
    {
    int i,u;
    for(i=nodev[v];i!=-1;i=next[i])
    {
    u=nodeu[i];
    if(!no[u])
    if( pre[u]==-1 || ( no[u]=true,find(pre[u]) ) )
    {
    pre[u]=v;
    return true;
    }
    }

    return false;
    }

    int main()
    {
    int v,n,m,cnt;
    //freopen("what.txt","r",stdin);
    while(scanf("%d %d",&n,&m)!=EOF)
    {
    Build_Graph(n,m);

    memset(pre,-1,sizeof(pre)); cnt=0;
    for(v=1;v<=n;v++)
    {
    memset(no,false,sizeof(no));
    if(find(v)) cnt++;
    }

    printf("%d\n",cnt);
    }
    return 0;
    }

    体会:该算法的思想是尽最大力量为每一个点查找匹配项,不放弃任何一个可能,全部的可能都试试,最终得出结果!

  • 相关阅读:
    3、Java基础类
    2、面向对象
    1、Java基础
    0.Eclipse
    【Python】UI自动化-1
    【Python】爬虫-2
    【Python】爬虫-1
    【Python】socket编程-3
    【Python】socket编程-2
    【Python】socket编程-1
  • 原文地址:https://www.cnblogs.com/fornever/p/2220722.html
Copyright © 2011-2022 走看看