zoukankan      html  css  js  c++  java
  • Air Raid HDU 1151

    题意  给定n个路口 加上一些单向路  求遍历完所有路口需要多少人  人是空降的 哪里都可以作为起点

    求 最小边覆盖   (用最少的边覆盖所有的点) 也叫最小路径覆盖(更形象) 也叫二分图的最大独立集合

    最小边覆盖==所有点-最大匹配数(匈牙利算法)

    理解: 如果没有路  则要n个人  多一条路  则可以减一个人  .

    #include<bits/stdc++.h>
    using namespace std;
    
    #define MAXI 505
    
    int mp[MAXI][MAXI];
    int used[MAXI];
    int vis[MAXI];//记录的是匹配情况
    int n,m;//n为左图  m为右图
    bool dfs(int  x)
    {
        for(int j=1;j<=n;j++)
        {
            if(mp[x][j]&&!used[j])
            {
                used[j]=1;
                if(!vis[j]||dfs(vis[j]))
                  {
                      vis[j]=x;
                      return true;
                  }
            }
        }
        return false;
    }
    
    
    int main()
    {
       int cas;
       scanf("%d",&cas);
       while(cas--)
       {
           memset(mp,0,sizeof(mp));
           memset(vis,0,sizeof(vis));
           scanf("%d%d",&n,&m);
           while(m--)
           {
               int a,b;
               scanf("%d%d",&a,&b);
               mp[a][b]=1;
           }
           int ans=0;
           for(int i=1;i<=n;i++)
           {
               memset(used,0,sizeof(used));
               if(dfs(i))ans++;
           }
           printf("%d
    ",n-ans);
       }
    }
  • 相关阅读:
    2014年之新年新愿
    C#解析Xml的Dom和Sax方式性能分析
    WCF协议与绑定
    使用SqlServer数据批量插入
    跨站脚本攻击XSS
    疯狂的JSONP
    SQLiteOpenHelper
    Android常用的UI布局
    Android用户界面
    ListView
  • 原文地址:https://www.cnblogs.com/bxd123/p/10361765.html
Copyright © 2011-2022 走看看