POJ3041 Asteroids(匈牙利算法)
嘟嘟嘟
虽然我已经会网络流了,但是还是学了一个匈牙利算法。
——就跟我会线段树,但还是学了树状数组一样。
其实匈牙利算法挺暴力的。简单来说就是先贪心匹配,然后如果左部点\(i\)匹配不上了,就尝试更改前面已经匹配好的点,腾出地给他匹配。
因此对于每一个点跑一遍匈牙利算法,如果这个点匹配成功,总匹配数就加1。
感觉没啥好讲的。
关于这道题怎么做,看我这篇博客吧。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
#define enter puts("")
#define space putchar(' ')
#define Mem(a, x) memset(a, x, sizeof(a))
#define rg register
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-8;
const int maxn = 505;
const int maxe = 1e4 + 5;
inline ll read()
{
  ll ans = 0;
  char ch = getchar(), last = ' ';
  while(!isdigit(ch)) last = ch, ch = getchar();
  while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
  if(last == '-') ans = -ans;
  return ans;
}
inline void write(ll x)
{
  if(x < 0) x = -x, putchar('-');
  if(x >= 10) write(x / 10);
  putchar(x % 10 + '0');
}
int n, k;
struct Edge
{
  int nxt, to;
}e[maxe];
int head[maxn], ecnt = -1;
void addEdge(int x, int y)
{
  e[++ecnt] = (Edge){head[x], y};
  head[x] = ecnt;
}
int fa[maxn], vis[maxn], vcnt = 0;
//fa:下标是右部点,表示右部点i和左部点fa[i]匹配上了
//vis:表示匹配点i的时候这个点是不是i要匹配的
//因此每一次dfs前应该清空,为了降低复杂度,改为累加标记
bool dfs(int now)
{
  for(int i = head[now], v; i != -1; i = e[i].nxt)
    {
      if(vis[v = e[i].to] != vcnt)
	{
	  vis[v] = vcnt;
	  if(!fa[v] || dfs(fa[v])) {fa[v] = now; return 1;}
	}
    }
  return 0;
}
int main()
{
  Mem(head, -1);
  n = read(); k = read();
  for(int i = 1; i <= k; ++i)
    {
      int x = read(), y = read();
      addEdge(x, y);
    }
  int ans = 0;
  for(int i = 1; i <= n; ++i)
    {
      ++vcnt;
      if(dfs(i)) ans++;
    }
  write(ans), enter;
  return 0;
}
POJ3041 Asteroids(匈牙利算法)的更多相关文章
- poj3041 Asteroids 匈牙利算法 最小点集覆盖问题=二分图最大匹配
		/** 题目:poj3041 Asteroids 链接:http://poj.org/problem?id=3041 题意:给定n*n的矩阵,'X'表示障碍物,'.'表示空格;你有一把枪,每一发子弹可 ... 
- Asteroids(匈牙利算法)
		求最小点覆盖数,即最大匹配数,匈牙利算法. #include<stdio.h> #include<string.h> ][],vis[],linker[];//linker[] ... 
- POJ 3041 Asteroids | 匈牙利算法模板
		emmmmm 让你敲个匈牙利 #include<cstdio> #include<algorithm> #include<cstring> #define N 51 ... 
- POJ 3041 Asteroids 匈牙利算法,最大流解法,行列为点 难度:1
		http://poj.org/problem?id=3041 #include <cstdio> #include <cstring> #include <vector& ... 
- POJ3041轰炸行星(匈牙利算法  最小覆盖点集)
		Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 25232 Accepted: 13625 Descr ... 
- 二分图最大匹配(匈牙利算法) POJ 3041 Asteroids
		题目传送门 /* 题意:每次能消灭一行或一列的障碍物,要求最少的次数. 匈牙利算法:把行和列看做两个集合,当有障碍物连接时连一条边,问题转换为最小点覆盖数==二分图最大匹配数 趣味入门:http:// ... 
- poj - 3041 Asteroids (二分图最大匹配+匈牙利算法)
		http://poj.org/problem?id=3041 在n*n的网格中有K颗小行星,小行星i的位置是(Ri,Ci),现在有一个强有力的武器能够用一发光速将一整行或一整列的小行星轰为灰烬,想要利 ... 
- POJ 3041 Asteroids(二分图 && 匈牙利算法 && 最小点覆盖)
		嗯... 题目链接:http://poj.org/problem?id=3041 这道题的思想比较奇特: 把x坐标.y坐标分别看成是二分图两边的点,如果(x,y)上有行星,则将(x,y)之间连一条边, ... 
- poj3020 建信号塔(匈牙利算法  最小覆盖边集)
		Antenna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10518 Accepted: 518 ... 
随机推荐
- MySQL---4、语句规范
			1.命名规范 (1)库名.表名.(按现在的规范类似; PromoHayaoRecord),数据库名使用小写,字段名必须使用小写字母,并采用下划线分割.关键字与函数名称全部大写.(2)库名.表名.字段名 ... 
- 小菜读书---《Effective C#:改善C#程序的50种方法》
			一.用属性代替可访问的字段 1..NET数据绑定只支持数据绑定,使用属性可以获得数据绑定的好处: 2.在属性的get和set访问器重可使用lock添加多线程的支持. 二.readonly(运行时常量) ... 
- c#之泛型详解(Generic)
			这篇文章主要来讲讲c#中的泛型,因为泛型在c#中有很重要的位置,对于写出高可读性,高性能的代码有着关键的作用. 一.什么是泛型? 泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个非 ... 
- 一、spark单机安装
			如果要全面的使用spark,你可能要安装如JDK,scala,hadoop等好些东西.可有时候我们只是为了简单地安装和测试来感受一下spark的使用,并不需要那么全面.对于这样的需要,我们其实只要安装 ... 
- c 语言 随机生成数函数
			int theRandom = 0; theRandom = arc4random_uniform(3)//随机生成一个从0到2的数 或者 #include "stdio.h" # ... 
- 优化SQLServer
			由于SQLServer,数据文件mdf过大,造成系统异常卡 一. 更改隔离级别 ALTER DATABASE [B2EC] SET SINGLE_USER WITH ROLLBACK IMMEDIAT ... 
- 系统分析与设计 homework-1
			1.软件工程的定义 软件工程是将系统化.规范化.可度量的方法应用于软件的开发.运营和维护上,也就是将工程方法应用于软件上,并对这些方法的研究. 2.软件危机(software crisis) 软件危机 ... 
- HDU 2045  RPG难题
			http://acm.hdu.edu.cn/showproblem.php?pid=2045 这道题也是用倒推: 先假设前n-2个块都已经涂好,涂第n-1块时有以下两种情况: 1.n-1和1相同,则n ... 
- svg矢量图标在html中的使用, (知识点:1.通过h5中的css实现点击变色,2.一个svg文件包含多个图标)
			svg矢量文件体积小,不变形,比传统的png先进,比现在流行的icon-font灵活.然而在使用过程中还是遇到了很多坑.今天花了一天时间把经验整理出来,以供后来者借鉴.如果您从本文收益,请留言mark ... 
- 【转载】windows 下重置 mysql 的 root 密码
			今天发现 WordPress 连接不上数据库,登录 window server 服务器查看,所有服务均运行正常. 使用 root 账号登录 mysql 数据库,结果提示密码不匹配.我突然意识到,服 ... 
