poj 3041 Asteroids 二分图匹配
来源:互联网 发布:java 日志slj4j 编辑:程序博客网 时间:2024/05/16 06:49
在N × N 的网格中有K个小行星。小行星的位置为(Ri,Ci)。现在有一个强有力的武器能够用一发光束将一整行或一整列小行星摧毁。现想利用这个武器摧毁所有小行星,问最少要几发光束?
(1 <= N <= 500)
(1 <= K <= 10000)
(1 <= R,C <= N)
二分图建图:
把光束当做顶点,小行星当做连接光束对应的边。由于每个小行星只能由其所在的横坐标或纵坐标的光束所摧毁,故一条边连接两个顶点,其图为二分图。
分析:
建图后所求的问题转化为,图中的任意边都有至少一个端点属于S的顶点集合(S属于V)即最小顶点覆盖。二分图中最小顶点覆盖 = 最大匹配。故该题为模板题……
#include <iostream>#include <cstdio>#include <vector>#include <cstring>using namespace std;const int MAX_V = 2000;const int MAX_K = 10000;int V;vector<int> G[MAX_V];int match[MAX_V];bool used[MAX_V];int N, K;int R[MAX_K], C[MAX_K];void add_edge(int u, int v) {G[u].push_back(v);G[v].push_back(u);}bool dfs(int v) {used[v] = true;for (int i = 0; i < G[v].size(); i++) {int u = G[v][i], w = match[u];if (w < 0 || !used[w] && dfs(w)) {match[u] = v;match[v] = u;return true;}}return false;}int bipartite_matching() {int res = 0;memset(match, -1, sizeof(match));for (int v = 0; v < V; v++) {if (match[v] < 0) {memset(used, 0, sizeof(used));if (dfs(v)) {res++;}}}return res;}void solve() {V = N * 2;for (int i = 0; i < K; i++) {add_edge(R[i] - 1, N + C[i] - 1);}cout << bipartite_matching() << endl;}int main() {cin >> N >> K;for (int i = 0; i < K; i++) {cin >> R[i] >> C[i];}solve();//system("pause");}
- Asteroids(poj 3041,二分图最大匹配)
- poj 3041 Asteroids 二分图匹配
- poj 3041 Asteroids (二分图匹配)
- POJ 3041 - Asteroids(二分图匹配)
- 【图论】【二分图匹配】[POJ 3041]Asteroids
- [二分图最大匹配] poj 3041 Asteroids
- [POJ 3041]Asteroids[二分图匹配]
- POJ 3041 Asteroids (二分图最大匹配)
- poj 3041 Asteroids 二分图最大匹配
- POJ 3041-Asteroids(二分图匹配)
- POJ 3041 Asteroids 二分图最大匹配
- POJ 3041 Asteroids(二分图匹配)
- POJ - 3041 Asteroids 【二分图匹配】
- POJ 3041 Asteroids(二分图匹配)
- poj 3041 Asteroids 二分图匹配
- POJ 3041 Asteroids 二分图最大匹配
- POJ 3041 Asteroids 二分匹配
- 【POJ】3041 Asteroids 二分匹配
- In-Stream大数据处理模式
- 1022. Digital Library (30)
- 用 NDK 编译 ffmpeg 到 Android 平台
- linux避免进程随终端关闭而被关闭
- In-Stream Big Data Processing
- poj 3041 Asteroids 二分图匹配
- Understanding GC pauses in JVM, HotSpot's minor GC.
- 国标645协议.....2007---项目所需二(数据链路层)
- Ogre空间变换,setPosition(),setDerivedPosition()和translate()的正确使用。
- 25岁研究生拿高薪互联网的offer,意气风发的走出学校
- 欢迎访问我的新个人网站,博客也搬家了。
- TCP采用哪些机制来实现可靠数据传输、流控和拥塞控制?
- 使用IO::Socket::INET模块实现socket编程
- Facebook unveils Presto engine for querying 250 PB data warehouse