zoukankan      html  css  js  c++  java
  • POJ 3041 匈牙利算法模板题

    一开始预习是百度的算法 然后学习了一下

    然后找到了学长的ppt 又学习了一下..

    发现..居然不一样...

    找了模板题试了试..百度的不好用 反正就是wa了..果然还是应当跟着学长混..

    图两边的点分别是行数和列数

    每有一个点 就让所处行列连一条边

    求最小点覆盖

    然后卡住...后来看了增林的博客...

    最小点覆盖=最大匹配数 果然是模板题..

    然后wa..

    后来发现是当进行对左边点的遍历的时候 每次都要mem一次vis数组

    应该是每次找之前都重新清空啊。。不然下次怎么找啊。。。增光路对点的是否被访问过不是有要求吗 —— 学长原话...

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<map>
    #include<math.h>
    using namespace std;
    int s[505][505];
    int vis[505];
    int n,m;
    int link[505];
    bool find(int i)
    {
        for(int k=1;k<=n;k++)
        {
            if(s[i][k]==1&&vis[k]==0)
            {
                vis[k]=-1;
                if(link[k]==-1||find(link[k]))
                {
                    link[k]=i;
                    return true;
                }
            }
        }
        return false;
    
    }
    int main(){
    while(~scanf("%d%d",&n,&m))
    {
        memset(s,0,sizeof(s));
        memset(link,-1,sizeof(link));
        for(int i=1;i<=m;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            s[a][b]=1;
        }
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            memset(vis,0,sizeof(vis));
            if(find(i))
            {
                ans++;
            }
        }
        printf("%d
    ",ans);
    }
    }
    

      

  • 相关阅读:
    leetcode 114. 二叉树展开为链表
    leetcode 338. 比特位计数
    leetcode 128. 最长连续序列
    leetcode 22. 括号生成
    leetcode 200. 岛屿数量
    leetcode 70. 爬楼梯
    P6072 『MdOI R1』Path
    CF1574D The Strongest Build
    『MdOI R1』Treequery
    CF1562E Rescue Niwen!
  • 原文地址:https://www.cnblogs.com/rayrayrainrain/p/5237007.html
Copyright © 2011-2022 走看看