zoukankan      html  css  js  c++  java
  • BZOJ 1191 [HNOI2006]超级英雄Hero:二分图匹配 匈牙利算法

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1191

    题意:

      有m道题,每答对一题才能接着回答下一个问题。

      你一道题都不会,但是你有n个“锦囊妙计”(每个只能用一次)。

      对于每道题,你只能用该题规定的两种锦囊中的一种,来解决这道题。

      问你最多能解决多少道题。

    题解:

      二分图最大匹配。

      匈牙利算法。

      

      问题与锦囊匹配。

      最大匹配即为最多回答数。

      但是题目中要求题目必须连续回答,不能中断。

      所以在给每一个问题配对时,一旦匹配不上,就终止匹配。

    AC Code:

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <string.h>
     4 #define MAX_N 1005
     5 
     6 using namespace std;
     7 
     8 int n,m;
     9 int ans=0;
    10 int match[MAX_N];
    11 bool vis[MAX_N];
    12 bool edge[MAX_N][MAX_N];
    13 
    14 bool hungary(int now)
    15 {
    16     for(int i=0;i<n;i++)
    17     {
    18         if(edge[now][i] && !vis[i])
    19         {
    20             vis[i]=true;
    21             if(match[i]==-1 || hungary(match[i]))
    22             {
    23                 match[i]=now;
    24                 return true;
    25             }
    26         }
    27     }
    28     return false;
    29 }
    30 
    31 void read()
    32 {
    33     memset(edge,false,sizeof(edge));
    34     cin>>n>>m;
    35     int a,b;
    36     for(int i=0;i<m;i++)
    37     {
    38         cin>>a>>b;
    39         edge[i][a]=true;
    40         edge[i][b]=true;
    41     }
    42 }
    43 
    44 void solve()
    45 {
    46     memset(match,-1,sizeof(match));
    47     for(int i=0;i<m;i++)
    48     {
    49         memset(vis,false,sizeof(vis));
    50         if(hungary(i)) ans++;
    51         else break;
    52     }
    53 }
    54 
    55 void print()
    56 {
    57     cout<<ans<<endl;
    58 }
    59 
    60 int main()
    61 {
    62     read();
    63     solve();
    64     print();
    65 }
  • 相关阅读:
    oracle中的DECODE
    服务器修改密码cmd
    oracle 创建用户,授权用户,创建表,查询表
    Oralce 处理字符串函数
    oracle 非数字型转数字型
    d3
    linux SVN 安装配置
    JAVA with Cassandra
    Struts2实现文件上传和下载
    xmanager 5图文使用教程
  • 原文地址:https://www.cnblogs.com/Leohh/p/7476650.html
Copyright © 2011-2022 走看看