Poj 3041 Asteroids 【最小点覆盖 匈牙利算法 】
来源:互联网 发布:佳能mg6280清零软件 编辑:程序博客网 时间:2024/05/22 14:19
链接:
http://poj.org/problem?id=3041
题解:
这题可以将障碍物的横坐标与纵坐标看成两个点然后连边,然后这题是要选最少条边使所有点都有边相连就是最小点覆盖数。
根据König 定理一个二分图中的最大匹配数等于这个图中的最小点覆盖数。
跑一遍匈牙利算法就有答案了。
#include<iostream>#include <stdio.h>#include <algorithm>#include <cmath>#include<stdlib.h>#include <string.h>#include<queue>#include<set>#include<map>#include<stack>#include<time.h>using namespace std;#define MAX_N 505#define inf 0x7fffffff#define LL long long#define ull unsigned long longconst LL INF = 9e18;const int mod = 100000000;typedef pair<double, double>P;bool G[MAX_N][MAX_N];int n, k;int linker[MAX_N];bool used[MAX_N];bool dfs(int u){ for(int i=1;i<=n;i++) { if(G[u][i] && !used[i]) { used[i] = true; if(!linker[i] || dfs(linker[i])) { linker[i] = u; return true; } } } return false;}int hungary(){ int res = 0; memset(linker, 0, sizeof(linker)); for(int i=1;i<=n;i++) { memset(used, false, sizeof(used)); if(dfs(i)) res++; } return res;}int main(){ cin >> n >> k; for(int i=0;i<k;i++) { int a, b; scanf("%d%d",&a,&b); G[a][b] = true; } int ans = hungary(); cout << ans << endl;}
0 0
- POJ 3041 Asteroids 匈牙利算法/最小点覆盖
- POJ 3041 Asteroids 【匈牙利算法最小点覆盖】
- POJ 3041 Asteroids(匈牙利算法—最小点覆盖)
- POJ 3041 Asteroids 匈牙利算法 最小点覆盖
- Poj 3041 Asteroids 【最小点覆盖 匈牙利算法 】
- 【POJ 3041 】Asteroids (匈牙利算法最小点覆盖&二分图)
- POJ 3041 Asteroids(最小顶点覆盖,匈牙利算法模板)
- POJ-1947-Asteroids-求最小点覆盖数(二分图-匈牙利算法)
- poj_3041 Asteroids(匈牙利算法+最小点覆盖)
- poj3041 Asteroids 最小点覆盖 二分图 匈牙利算法BFS
- POj 3041 Asteroids 最小点覆盖
- POJ 3041:Asteroids:最小点覆盖
- poj 3041 Asteroids (最小点覆盖)
- POJ 3041 Asteroids(最小点覆盖)
- POJ 3041 Asteroids(最小点覆盖)
- POJ 3041 Asteroids 最小点覆盖
- POJ 3041 Asteroids(最小点覆盖)
- Poj 3041 Asteroids【最小点覆盖】
- JAVA蓝桥杯(4)Excel地址转换
- Handler消息机制原理
- Unity编程标准导引-Unity中的基本概念-2.1界面概览
- CentOS安装Nginx
- 配置javaweb环境报如下错误
- Poj 3041 Asteroids 【最小点覆盖 匈牙利算法 】
- lintcode-入门-删除链表中的元素
- spring aop 日志
- 1059. Prime Factors (25)
- 微信小程序的全栈之路
- 欢迎使用CSDN-markdown编辑器
- linux常用命令(2)
- leecode 解题总结:123. Best Time to Buy and Sell Stock III
- CentOS 配置静态IP