zoukankan      html  css  js  c++  java
  • 南阳239----月老的难题『匈牙利算法』

     1 /*
     2 匈牙利算法模版题
     3 邻接表实现,邻接矩阵超时
     4 最大匹配问题
     5  */
     6 #include <cstdio>
     7 #include <vector>
     8 #include <cstring>
     9 using namespace std;
    10 const int maxn = 505;
    11 vector<int> v[maxn];//x = v[i][j]表示i可以与x进行匹配
    12 int vis[maxn],match[maxn];//vis[i]表示i已经访问(匹配)过为了防止在每次dfs中重复访问某点,x = match[i]表示x现在和i匹配
    13 bool dfs(int x)
    14 {
    15     for(int i = 0; i < v[x].size(); ++i)
    16     {
    17         int t = v[x][i];
    18         if(!vis[t])
    19         {
    20             vis[t] = 1;
    21             if(match[t] == -1 || dfs(match[t]))
    22             {match[t] = x; return true;}
    23         }
    24     }
    25     return false;
    26 }
    27 int hungary(int n)
    28 {
    29     int ans = 0;
    30     for(int i = 1; i <= n; ++i)
    31     {
    32         memset(vis,0,sizeof vis);
    33         if(dfs(i)) ++ans;
    34     }
    35     return ans;
    36 }
    37 int main()
    38 {
    39     int t,n,m,x,y;
    40     scanf("%d",&t);
    41     while(t--)
    42     {
    43         scanf("%d%d",&n,&m);
    44         for(int i = 1; i <= n; ++i)
    45             v[i].clear();
    46         memset(match, -1, sizeof match);
    47         while(m--)
    48         {
    49             scanf("%d%d",&x,&y);
    50             v[x].push_back(y);
    51         }
    52         printf("%d
    ",hungary(n));
    53     }
    54     return 0;
    55 }
  • 相关阅读:
    爬取校园新闻首页的新闻
    网络爬虫基础练习
    综合练习:词频统计
    免费的论文查重网站
    Hadoop综合大作业
    理解MapReduce
    熟悉常用的HBase操作
    熟悉常用的HDFS操作
    爬虫大作业
    数据结构化与保存
  • 原文地址:https://www.cnblogs.com/qq188380780/p/7356545.html
Copyright © 2011-2022 走看看