poj 3041 Asteroids 二分匹配 匈牙利算法 模板题

来源:互联网 发布:win7服务器端口开放 编辑:程序博客网 时间:2024/06/05 03:31
http://poj.org/problem?id=3041
题意:给你长宽都有n个格子的矩阵,其中一些格子放着星球,现在可以一次消除一行或者一列的星球
求要让所有星球都消失的最少的次数。
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    #include <vector>
    #include <queue>
    #include <map>
    #include <algorithm>
    #include <set>
    using namespace std;
    #define MM(a) memset(a,0,sizeof(a))
    typedef long long ll;
    typedef unsigned long long ULL;
    const int mod = 1000000007;
    const double eps = 1e-10;
    const int inf = 0x3f3f3f3f;
    const int big=50000;
    int max(int a,int b) {return a>b?a:b;};
    int min(int a,int b) {return a<b?a:b;};
    const int N = 500;
    const int M=20000;
    int n,m,x,y;
    vector<int> G[1005];
    int used[505],match[1005];
    void add_edge(int u,int v)
    {
    G[u].push_back(v);
    G[v].push_back(u);
    }
    int dfs(int u)
    {
    used[u]=1;
    for(int i=0;i<G[u].size();i++)
    {
    int v=G[u][i],w=match[v];
    if(w<0||!used[w]&&dfs(w))
    {
    match[u]=v;
    match[v]=u;
    return 1;
    }
    }
    return 0;
    }
    int max_flow()
    {
    memset(match,-1,sizeof(match));
    int ans=0;
    for(int u=1;u<=n;u++)
    if(match[u]<0)
    {
    memset(used,0,sizeof(used));
    if(dfs(u))
    ans++;
    }
    return ans;
    }
    int main()
    {
    while(~scanf("%d %d",&n,&m))
    {
    for(int i=1;i<=m;i++)
    {
    scanf("%d %d",&x,&y);
    add_edge(x,y+n);
    }
    printf("%d\n",max_flow());
    }
    return 0;
    }

分析:构造二分图,左边一列是星球的行,右边一列是星球的列 ,则放入一个星球就转化成了一条边,
则最小顶点覆盖=>最大匹配,然后匈牙利算法
找增广路
【传说】99北极-老活 2016/2/10 23:47:02

是从一边开始
【传说】99北极-老活 2016/2/10 23:47:13

所以是左边或者右边点的数量
【传说】99北极-老活 2016/2/10 23:47:27

不是总点数
【传说】99北极-老活 2016/2/10 23:47:39

另外左右边点数可以不一样

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 不记得锁屏密码怎么办 小米手机音量键坏了怎么办 小米6音量键坏了怎么办 小米2s开不开机怎么办 小米4不充电了怎么办 小米2开不开机怎么办 手机开机键开不了机怎么办 三星s4反复重启怎么办 小米5反复重启怎么办 电脑系统奔溃了怎么办 电脑开机后屏幕出现英文怎么办 小米4开不开机了怎么办 小米4一直显示mi怎么办 小米手机开关键失灵怎么办 小米手机开机键失灵怎么办 小米6不断重启怎么办 小米6一直重启怎么办 小米6自动重启怎么办 手机的开机键坏了怎么办 小米6频繁重启怎么办 小米6安装xp卡米怎么办 刷机失败反复重启怎么办 红米手机很卡怎么办啊 红米2a显示图标怎么办 手机一直处于开机状态怎么办 vivo手机进水开不了机怎么办 魅蓝s6锁了怎么办 pos机刷卡刷多了怎么办 红米5a开不机怎么办 魅族双亲要密码怎么办? 苹果wi-fi网速慢怎么办 腾达宽带用户名密码忘了怎么办 无线网秘密忘了怎么办 wan口设置已断开怎么办 中兴手机忘记解锁图案怎么办 u盘显示参数错误怎么办 硬盘vc加密密码忘了怎么办 软件文件移动到其他盘打不开怎么办 u盘无法复制文件怎么办 u盘大文件不能拷怎么办 abc看图打印不了怎么办