hdu 2389 Rain on your Parade【最大匹配】
来源:互联网 发布:november rain 知乎 编辑:程序博客网 时间:2024/05/21 11:57
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2389
用 Hopcroft-Karp 算法
匈牙利算法会超时
代码:
#include <stdio.h>#include <iostream>#include <math.h>#include <stdlib.h>#include <ctype.h>#include <algorithm>#include <vector>#include <string.h>#include <string>#include <queue>#include <stack>#include <set>#include <sstream>#include <time.h>using namespace std;const int N = 3005;const int INF = 1 << 28;int g[N][N];int Mx[N];int My[N];int dx[N];int dy[N];bool used[N];int Nx, Ny, dis;bool searchP(){ dis = INF; int i, v, u; std::queue<int> Q; memset(dx, -1, sizeof(dx)); memset(dy, -1, sizeof(dy)); for (i = 0; i<Nx; i++) { if (Mx[i] == -1) { Q.push(i); dx[i] = 0; } } while (!Q.empty()) { u = Q.front(); Q.pop(); if (dx[u]>dis) break; for (v = 0; v<Ny; v++) { if (g[u][v] && dy[v] == -1) { dy[v] = dx[u] + 1; if (My[v] == -1) dis = dy[v]; else { dx[My[v]] = dy[v] + 1; Q.push(My[v]); } } } } return dis != INF;}bool DFS(int u){ int v; for (v = 0; v<Ny; v++) { if (g[u][v] && !used[v] && dy[v] == dx[u] + 1) { used[v] = true; if (My[v] != -1 && dy[v] == dis) continue; if (My[v] == -1 || DFS(My[v])) { My[v] = u; Mx[u] = v; return true; } } } return false;}int Hungary(){ int u; int ret = 0; memset(Mx, -1, sizeof(Mx)); memset(My, -1, sizeof(My)); while (searchP()) { memset(used, false, sizeof(used)); for (u = 0; u<Nx; u++) if (Mx[u] == -1 && DFS(u)) ret++; } return ret;}struct Peo{ int x; int y; int s;}peo[3010];int n, m;int main(){ int t, cases = 1; scanf("%d", &t); while (t--) { memset(g, 0, sizeof(g)); int T, x, y; scanf("%d", &T); scanf("%d", &m); for (int i = 1;i <= m;i++) scanf("%d%d%d", &peo[i].x, &peo[i].y, &peo[i].s); scanf("%d", &n); for (int i = 1;i <= n;i++) { scanf("%d%d", &x, &y); for (int j = 1;j <= m;j++) { int Dis = ceil(sqrt((peo[j].x - x) * (peo[j].x - x) + (peo[j].y - y) * (peo[j].y - y)) * 1.0 / peo[j].s); if (Dis <= T) g[i-1][j-1] = 1; } } Nx = n; Ny = m; int ans = Hungary(); printf("Scenario #%d:\n%d\n\n", cases++, ans); } return 0;}
0 0
- hdu 2389 Rain on your Parade【最大匹配】
- hdu 2389 Rain on your Parade(最大匹配,Hopcroft-Karp算法模版)
- hdu 2389 Rain on your Parade(二分最大匹配HK算法)
- hdu 2389 Rain on your Parade(二分图最大匹配,Hopcroft-Karp)
- hdu 2389 Rain on your Parade 二分匹配 HK算法
- 【二分匹配】 HDU 2389 Rain on your Parade HK算法
- HDU-2389-Rain on your Parade [二分匹配][Hopcroft-Carp]
- HDU 2389 Rain on your Parade //MAXMATCH
- Hdu 2389 Rain on your Parade
- hdu 2389 Rain on your Parade
- HDU 2389 Rain on your Parade
- HDU 2389 Rain on your Parade
- Rain on your Parade HDU
- Rain on your Parade HDU
- hdu2389 Rain on your Parade (最大匹配Hopcroft--Karp)
- hdu2389 Rain on your Parade--HK算法 & 最大匹配数
- HDU 2389 Rain on your Parade / HUST 1164 4 Rain on your Parade
- 【HDU】2389 Rain on your Parade 二分匹配 Hopcroft-Krap算法
- iOS通过UIAlertView实现Android Toast效果
- hdu 2452 Navy maneuvers-记忆化搜索
- css中的优先级
- Storyboard的简单使用
- zoj 1081 Points Within
- hdu 2389 Rain on your Parade【最大匹配】
- python的jieba分词词性标注
- iOS开发 ----- UITablBarController_NSUserDefault
- 14.如何给分类添加数据成员
- POJ 3349 Snowflake Snow Snowflakes ( HASH+最小表示判同构 )
- iOS开发 ----- UIGestureRecognizer
- SpringMVC设置缺省的返回数据格式
- linux c 字符判断函数
- iOS开发 ----- UIScrollview UIPageControl