zoukankan      html  css  js  c++  java
  • 洛谷P3386 【模板】二分图匹配

    题目背景

    二分图

    感谢@一扶苏一 提供的hack数据

    题目描述

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

    输入输出格式

    输入格式:

    第一行,n,m,e

    第二至e+1行,每行两个正整数u,v,表示u,v有一条连边

    输出格式:

    共一行,二分图最大匹配

    输入输出样例

    输入样例#1: 
    1 1 1
    1 1
    输出样例#1: 
    1

    说明

    n,m1000,1un, 1vm

    因为数据有坑,可能会遇到 v>mv 的情况。请把 v>m的数据自觉过滤掉。

    算法:二分图匹配

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 using namespace std;
     5 long long read()
     6 {
     7     long long x=0,f=1;
     8     char ch=getchar();
     9     while(ch<'0'||ch>'9')
    10     {
    11         if(ch=='-')
    12             f=-1;
    13         ch=getchar();
    14     }
    15     while(ch>='0'&&ch<='9')
    16     {
    17         x=x*10+ch-'0';
    18         ch=getchar();
    19     }
    20     return x*f;
    21 }
    22 const int maxn=2005;
    23 int n,m,e,ans;
    24 int vis[maxn][maxn],ask[maxn],matched[maxn];
    25 bool found(int x)
    26 {
    27     for(int i=1 ; i<=m ; i++)
    28         if(vis[x][i])
    29         {
    30             if(ask[i])
    31                 continue;
    32             ask[i]=1;
    33             if(!matched[i]||found(matched[i]))
    34             {
    35                 matched[i]=x ;
    36                 return true;
    37             }
    38         }
    39     return false;
    40 }
    41 void match()
    42 {
    43     int cnt=0;
    44     memset(matched,0,sizeof(matched));
    45     for(int i=1 ; i<=n ; i++)
    46     {
    47         memset(ask,0,sizeof(ask));
    48         if(found(i))
    49             cnt++;
    50     }
    51     ans=cnt;
    52 }
    53 int main()
    54 {
    55     n=read(),m=read(),e=read();
    56     for(int i=1 ; i<=e ; i++)
    57     {
    58         int x,y;
    59         x=read(),y=read();
    60         vis[x][y]=1;
    61     }
    62     match();
    63     printf("%d
    ",ans);
    64     return 0;
    65 }
    View Code
  • 相关阅读:
    traversal outlook folders
    vba get contact name in outlook
    merge all worksheets in current directory
    pandas Dataframe more filter
    Dataframe swap columns
    【数据分析&数据挖掘】数组的数据类型
    【数据分析&数据挖掘】数组的创建
    【数据分析&数据挖掘】矩阵的运算
    【数据分析&数据挖掘】矩阵的创建
    【python基础】装饰器
  • 原文地址:https://www.cnblogs.com/liweilin/p/10198862.html
Copyright © 2011-2022 走看看