POJ3041-Asteroids-匈牙利算法】的更多相关文章

/** 题目:poj3041 Asteroids 链接:http://poj.org/problem?id=3041 题意:给定n*n的矩阵,'X'表示障碍物,'.'表示空格;你有一把枪,每一发子弹可以消除一行或者一列的障碍物, 问最少需要多少颗子弹可以清空障碍物? 思路:最小点集覆盖问题,等价于最大匹配.把所有的行看做二分图的左边的节点,所有的列看做二分图右边的节点. 如果f[i][j]==true;那么第i行与第j列有关系,连一条边.对这个二分图求最大匹配即可. 采用匈牙利算法. 匈牙利算法…
求最小点覆盖数,即最大匹配数,匈牙利算法. #include<stdio.h> #include<string.h> ][],vis[],linker[];//linker[]记录V2中的点i在V1中所匹配的点x的编号 int n,k; int dfs(int x) { ; i <= n; i++) { if (map[x][i] && !vis[i])//x到i有边且i点未被标记 { vis[i] = ; if (!linker[i]||dfs(linker…
emmmmm 让你敲个匈牙利 #include<cstdio> #include<algorithm> #include<cstring> #define N 510 using namespace std; int adj[N][N],n,k,vis[N],bf[N],cnt; int find(int x) { ;i<=n;i++) if (adj[x][i] && !vis[i]) { vis[i]=; if (!bf[i] || find(…
http://poj.org/problem?id=3041 #include <cstdio> #include <cstring> #include <vector> using namespace std; int e[1004][1004]; bool vis[1004]; vector <int > G[1004]; int n,m; int dfs(int s){ vis[s]=true; if(s==n*2+1){//printf("…
嘟嘟嘟 虽然我已经会网络流了,但是还是学了一个匈牙利算法. --就跟我会线段树,但还是学了树状数组一样. 其实匈牙利算法挺暴力的.简单来说就是先贪心匹配,然后如果左部点\(i\)匹配不上了,就尝试更改前面已经匹配好的点,腾出地给他匹配. 因此对于每一个点跑一遍匈牙利算法,如果这个点匹配成功,总匹配数就加1. 感觉没啥好讲的. 关于这道题怎么做,看我这篇博客吧. #include<cstdio> #include<iostream> #include<cmath> #in…
Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 25232   Accepted: 13625 Description Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape of an N x N grid (1 <= N <= 500). The grid contains K a…
题目传送门 /* 题意:每次能消灭一行或一列的障碍物,要求最少的次数. 匈牙利算法:把行和列看做两个集合,当有障碍物连接时连一条边,问题转换为最小点覆盖数==二分图最大匹配数 趣味入门:http://blog.csdn.net/dark_scope/article/details/8880547 */ #include <cstdio> #include <algorithm> #include <cstring> #include <vector> usi…
http://poj.org/problem?id=3041 在n*n的网格中有K颗小行星,小行星i的位置是(Ri,Ci),现在有一个强有力的武器能够用一发光速将一整行或一整列的小行星轰为灰烬,想要利用这个武器摧毁所有的小行星最少需要几发光束. 主要是构图,将每一行当成一个点,构成集合1,每一列也当成一个点,构成集合2,每一个障碍物的位置坐标将集合1和集合2的点连接起来,也就是将每一个障碍物作为连接节点的边,这样可以得出本题是一个最小点覆盖的问题==二分图的最大匹配. 就可以通过匈牙利算法求解.…
嗯... 题目链接:http://poj.org/problem?id=3041 这道题的思想比较奇特: 把x坐标.y坐标分别看成是二分图两边的点,如果(x,y)上有行星,则将(x,y)之间连一条边,而我们要做的就是要找尽量少的点把所有的边覆盖,即为最小点覆盖问题,根据König定理:最小覆盖点数=最大匹配数,所以就可以用匈牙利算法求最大匹配了. AC代码: #include<cstdio> #include<cstring> #include<iostream> us…
Antenna Placement Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10518   Accepted: 5189 Description The Global Aerial Research Centre has been allotted the task of building the fifth generation of mobile phone nets in Sweden. The most s…