zoukankan      html  css  js  c++  java
  • 【洛谷 p3386】模板-二分图匹配(图论)

    题目:给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数。

    解法:匈牙利算法。(以前我总是不记得......)实质上应该有贪心的思想,每次都尽量匹配,找到能和自己匹配的也尽量让它们匹配。若对方已有匹配的对象,就让那个对象尽量调整来使自己这对能凑起来。而要注意,每次问过的对象就不要再问了,也就是不要让它的对象总是换来换去......

     1 #include<cstdio>
     2 #include<cstdlib>
     3 #include<cstring>
     4 #include<iostream>
     5 using namespace std;
     6 
     7 const int N=1010,M=1010;
     8 int n,m,e;
     9 int vis[N][N];
    10 int ask[M],cp[M];
    11 
    12 bool ffind(int x)
    13 {
    14     for (int i=1;i<=m;i++)
    15       if (vis[x][i])
    16       {
    17         if (ask[i]) continue;
    18         ask[i]=1;
    19         if (!cp[i]||ffind(cp[i]))
    20         {cp[i]=x;return true;}
    21       }
    22     return false;
    23 }
    24 void getmatch()
    25 {
    26     int ans=0;
    27     memset(cp,0,sizeof(cp));
    28     for (int i=1;i<=n;i++)
    29     {
    30       memset(ask,0,sizeof(ask));
    31       if (ffind(i)) ans++;
    32     }
    33     printf("%d
    ",ans);
    34 }
    35 int main()
    36 {
    37     scanf("%d%d%d",&n,&m,&e);
    38     for (int i=1;i<=e;i++)
    39     {
    40       int x,y;
    41       scanf("%d%d",&x,&y);
    42       vis[x][y]=1;
    43     }
    44     getmatch();
    45     return 0;
    46 }
  • 相关阅读:
    ASP.NET MVC 与 Web Forms
    去除两端margin的方法
    Media Queries之Respond.js
    ECMAScript5严格模式
    用rem设置文字大小
    BFC与hasLayout
    快速把项目部署到webLogic上
    判断一个坐标点是否在不规则多边形内部的算法
    Git 工作流的正确打开方式
    Java设计模式六大原则
  • 原文地址:https://www.cnblogs.com/konjak/p/6076835.html
Copyright © 2011-2022 走看看