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

    链接:P3386

    --------------------------------

    这道题要用到一个名为匈牙利算法的东西

    匈牙利算法就是对于每一个点,(例如A)我们先从开始找一个点(例如B),如果他们相连,并且没有被拜访过(一个点一次只能被拜访一次),就让他们配对。然而,如果B已经和C配对了,就把C赶走,看看能不能找到一个D和C配对,如果有,就让C和D配对。让A和B配对。

    反之,就遍历下一个与A相连的点并重复以下步骤

    -------------------------------------

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 using namespace std;
     6 int map[2001][2001];
     7 int n,m,e;
     8 int vis[200001];
     9 int match[2000001];
    10 
    11 
    12 bool find (int x){
    13     for(int i=1;i<=m;++i){
    14         if(map[x][i]){
    15             if(vis[i])
    16             continue;//只能拜访一次 
    17             vis[i]=1;
    18             if(!match[i]||find(match[i])){//试图给他找下一个点 
    19                 match[i]=x;//配对 
    20                 return 1;
    21             }
    22             
    23         }
    24     }
    25     return 0;
    26 }
    27     int cnt=0;
    28 void deal(){
    29 
    30     memset (match,0,sizeof(match));
    31     for(int i=1;i<=n;++i){
    32         memset(vis,0,sizeof(vis));
    33         if(find(i))
    34         cnt++;//找到一个就+1 
    35     }
    36 }
    37 
    38 int main(){
    39     cin>>n>>m>>e;
    40     for(int i=1;i<=e;++i){
    41         int x,y;
    42         cin>>x>>y;
    43         map[x][y]=1;
    44     }
    45     deal();
    46     cout<<cnt;
    47     return 0;
    48     }
    Ac
  • 相关阅读:
    Oracle 创建表并设置主键自增
    Oracle 基本知识回顾
    关于JAVAweb的一些东西
    JAVA获取运行环境的信息
    关于正则表达式的一些东西
    关于jQuery的一些东西
    关于JS的一些东西
    thymeleaf 的使用
    小程序flex容器
    Vue组件化
  • 原文地址:https://www.cnblogs.com/For-Miku/p/11262816.html
Copyright © 2011-2022 走看看