博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pku 3041 Asteroids 二分图匹配——匈牙利算法求最小点覆盖
阅读量:5053 次
发布时间:2019-06-12

本文共 1035 字,大约阅读时间需要 3 分钟。

将行与列转化为左右点集,只要出现Asteroids的点(i,j)就对i j建边,然后求最小点覆盖即可。。。

View Code
#include 
#include
#include
#define maxn 507 using namespace std; int map[maxn][maxn]; int link[maxn]; bool vt[maxn]; int n,m; bool dfs(int rpos) {
int i; for (i = 1; i <= n; ++i) {
if (!vt[i] && map[rpos][i]) {
vt[i] = true; if (link[i] == -1 || dfs(link[i])) {
link[i] = rpos; return true; } } } return false; } void init() {
int i,j; for (i = 0; i <= n; ++i) {
link[i] = -1; for (j = 0; j <= n; ++j) map[i][j] = 0; } } int main() {
int i,x,y; cin>>n>>m; init(); for (i = 0; i < m; ++i) {
cin>>x>>y; map[x][y] = 1; } int count = 0; for (i = 1; i <= n; ++i) {
memset(vt,false,sizeof(vt)); if (dfs(i)) count++; } cout<
<

转载于:https://www.cnblogs.com/E-star/archive/2012/03/14/2396691.html

你可能感兴趣的文章
CSS选择器小结
查看>>
[差分][倍增lca][tarjan] Jzoj P3325 压力
查看>>
[数学][dp] Jzoj P4236 登山
查看>>
C++继承方式
查看>>
Page2
查看>>
FIT2096 Assignment 2 2019
查看>>
软件工程实验一 复利计算——单元测试
查看>>
Python多进程并发(multiprocessing)
查看>>
读取配置文件参数和文件路径
查看>>
2017 UESTC Training for Graph Theory
查看>>
oracle实用的sqlplus命令
查看>>
Selenium上机实验
查看>>
BZOJ1369/BZOJ2865 【后缀数组+线段树】
查看>>
微软ASP.NET站点部署指南(8):部署Code-Only更新
查看>>
FreeModbus移植实例(转)
查看>>
筛素数 [高效]
查看>>
正則表達式(轉)
查看>>
Java并发编程:线程池的使用
查看>>
Python 的xlutils模块
查看>>
springMVC笔记(四)- 不配置HandlerMapping
查看>>