关闭

poj 3041 Asteroids(二分图匹配匈牙利算法)

标签: acm二分图匈牙利算法算法
246人阅读 评论(0) 收藏 举报
分类:
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
int way[501][501],boy[501],girl[501];
int m,n;
bool findways(int x)
{
    for (int i=1; i<=m; i++)
    {
        if(!girl[i]&&way[x][i])
        {
            girl[i]=1;
            if (!boy[i]||findways(boy[i]))
            {
                boy[i]=x;
                return true;
            }
        }
    }
    return false;
}
int main()
{
        int a,b,sum;
        scanf("%d %d",&m,&n);
        memset(way,0,sizeof(way));
        memset(boy,0,sizeof(boy));
        sum=0;
        for (int i=0; i<n; i++)
        {
            scanf("%d %d",&a,&b);
            way[a][b]=1;
        }
        for (int i=1; i<=m; i++)
        {
            memset(girl,0,sizeof(girl));
            if (findways(i)) sum++;
        }
        printf("%d\n",sum);
    return 0;
}

0
0
查看评论

POJ 3041 Asteroids(最小覆盖数)

POJ 3041 Asteroids(最小覆盖数) http://poj.org/problem?id=3041 题意:        有一个N*N的网格,该网格有K个障碍物.你有一把武器,每次你使用武器可以清楚该网格特定行或列的所有障碍....
  • u013480600
  • u013480600
  • 2014-08-16 18:04
  • 794

poj_3041 匈牙利算法

思路:
  • yeruby
  • yeruby
  • 2014-09-16 13:25
  • 1747

poj 3041 Asteroids(二分图匹配匈牙利算法)

#include #include #include using namespace std; int pp[510][510]; int map[510] , vis[510]; int n,k; int find_path(int x) { for(int i=1;i<=n;i+...
  • u014552756
  • u014552756
  • 2015-11-15 20:41
  • 238

POJ 3041 Asteroids 二分图匹配 匈牙利算法

本人的第一个匈牙利算法之前离散数学中讲的二分图都没有什么概念了,拿出来学学二分图就是这么一个图,图中的点集分为两个子集,子集中的点没有相连,只和另一子集中的点相连。二分图也分有向图和无向图。 最基本的二分图的题目是求最大匹配,匹配是二分图中边的集合,且集合中的任意两条边没有公共点,包含边数...
  • yming0221
  • yming0221
  • 2010-12-22 10:46
  • 2016

POJ 3041 Asteroids(二分图匹配+匈牙利算法)

Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18296 Accepted: 9973 Description Bessie wants to navigate her spaceship t...
  • Opheelia
  • Opheelia
  • 2015-11-28 11:25
  • 182

【网络流-二分图最大匹配】poj3041Asteroids

/* 这道题将每行x看成是结点x,没列y看成是结点y,而障碍物的坐标xy看成是从x到y的 一条边。建图后问题就变成了,找最少的点,使得这些点与所有的边相邻,即最小 点覆盖,用匈牙利算法解决。 ------------------------------- 定理:最小点覆盖数 = 最大匹配数,即求图的...
  • u013147615
  • u013147615
  • 2014-08-04 19:40
  • 554

poj 3041 Asteroids 二分图匹配

在N × N 的网格中有K个小行星。小行星的位置为(Ri,Ci)。现在有一个强有力的武器能够用一发光束将一整行或一整列小行星摧毁。现想利用这个武器摧毁所有小行星,问最少要几发光束? (1 (1 (1 二分图建图:    ...
  • stq1206
  • stq1206
  • 2013-10-01 11:09
  • 264

POJ 3041 Asteroids (匈牙利算法)

题意:矩阵上有一些小行星,占据了一些格子,我们每次操作可以清理一列中的所有小行星,也可以清理一行中的所有小行星,问最少进行多少次操作可以清理掉所有的小行星。 分析:一个小行星,要么清理该行,要么该列。所以也就是每个小行星对应的行列中至少选择一样来清理。下面建图,如果我们把每行看成集合一中的点,每...
  • u010862260
  • u010862260
  • 2013-09-02 22:05
  • 485

POJ 3041 Asteroids (匈牙利算法)

题目大意 给出n*n的矩形,k个点。每次可选择删除一行或一列的点,求至少需要删除几次方可将点全部删除。 分析 构造有向二分图:把每行x或者每列y看成一个点,而障碍物(x,y)可以看做连接x和y的边。 问题就转化成为选择最少的一些点(x或y),使得从这些点与所有的边相邻,其实这就是最小点覆盖问题。 K...
  • u013961718
  • u013961718
  • 2015-10-28 20:48
  • 201

POJ 3041 Asteroids(二分图匹配)

题目分析 给出一个太空棋盘N*N,并且有K个星球位于这个棋盘上,给出这些星球的位置,然后让你摧毁这些星球,你每次选定一个点,然后你就可以摧毁这个点所在行或者所在列的全部星球。这样我们将所有星球的坐标(x,y)建立有向边,那么很明显这是一个二分图,而题目想要求的正是该二分图的最小点覆盖,最先点覆盖...
  • chen_ze_hua
  • chen_ze_hua
  • 2016-09-03 11:53
  • 140
    个人资料
    • 访问:174964次
    • 积分:4859
    • 等级:
    • 排名:第7004名
    • 原创:314篇
    • 转载:9篇
    • 译文:0篇
    • 评论:75条
    最新评论