读题显然是二分图匹配,看成guest与umbrella的匹配。匈牙利果断TLE了,其实时间卡的相当紧。HK过的,750ms。

 /* 2389 */
#include <iostream>
#include <string>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <vector>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cstring>
#include <climits>
#include <cctype>
using namespace std; typedef struct {
int v, next;
} Edge_t; const int maxn = ; Edge_t E[maxn*maxn];
int head[maxn], L;
int dx[maxn], dy[maxn];
int xpre[maxn], ypre[maxn];
int gx[maxn], gy[maxn], gs[maxn];
bool visit[maxn];
int rt, n, m;
int ans, dis; void init() {
L = ;
memset(head, -, sizeof(head));
memset(xpre, -, sizeof(xpre));
memset(ypre, -, sizeof(ypre));
} void addEdge(int u, int v) {
E[L].v = v;
E[L].next = head[u];
head[u] = L++;
} bool bfs() {
int i, j, k;
int u, v;
queue<int> Q; memset(dx, -, sizeof(dx));
memset(dy, -, sizeof(dy));
dis = INT_MAX; for (i=; i<m; ++i) {
if (xpre[i] == -) {
Q.push(i);
dx[i] = ;
}
} while (!Q.empty()) {
u = Q.front();
Q.pop();
if (dx[u] > dis)
break;
for (i=head[u]; i!=-; i=E[i].next) {
v = E[i].v;
if (dy[v] == -) {
dy[v] = dx[u] + ;
if (ypre[v] == -) {
dis = dy[v];
} else {
dx[ypre[v]] = dy[v] + ;
Q.push(ypre[v]);
}
}
}
} return dis!=INT_MAX;
} int dfs(int u) {
int i, v;
// Edge_t e; for (i=head[u]; i!=-; i=E[i].next) {
v = E[i].v;
if (!visit[v] && dy[v]==dx[u]+) {
visit[v] = true;
if (ypre[v]!=- && dy[v]==dis)
continue;
if (ypre[v]==- || dfs(ypre[v])) {
xpre[u] = v;
ypre[v] = u;
return ;
}
}
} return ;
} int HK() {
int ret = ; while (bfs()) {
memset(visit, false, sizeof(visit));
for (int i=; i<m; ++i)
if (xpre[i] == -)
ret += dfs(i);
}
return ret;
} int main() {
int i, j, k;
int t, tt;
int x, y; #ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif scanf("%d", &tt);
for (t=; t<=tt; ++t) {
scanf("%d", &rt);
scanf("%d", &m);
init();
for (i=; i<m; ++i)
scanf("%d %d %d", &gx[i], &gy[i], &gs[i]);
scanf("%d", &n);
for (i=; i<n; ++i) {
scanf("%d %d", &x, &y);
for (j=; j<m; ++j) {
dis = gs[i] * rt;
if ((x-gx[j])*(x-gx[j])+(y-gy[j])*(y-gy[j]) <= dis*dis)
addEdge(j, i);
}
}
ans = HK();
printf("Scenario #%d:\n%d\n\n", t, ans);
} #ifndef ONLINE_JUDGE
printf("%d\n", (int)clock());
#endif return ;
}

【HDOJ】2389 Rain on your Parade的更多相关文章

  1. HDU 2389 Rain on your Parade / HUST 1164 4 Rain on your Parade(二分图的最大匹配)

    HDU 2389 Rain on your Parade / HUST 1164 4 Rain on your Parade(二分图的最大匹配) Description You're giving a ...

  2. HDU 2389 ——Rain on your Parade——————【Hopcroft-Karp求最大匹配、sqrt(n)*e复杂度】

    Rain on your Parade Time Limit:3000MS     Memory Limit:165535KB     64bit IO Format:%I64d & %I64 ...

  3. HDOJ 2389 Rain on your Parade

     HK.... Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 655350/165535 K ...

  4. HDU 2389 Rain on your Parade(二分匹配,Hopcroft-Carp算法)

    Rain on your Parade Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 655350/165535 K (Java/Ot ...

  5. HDU 2389 Rain on your Parade 最大匹配(模板题)【HK算法】

    <题目链接> 题目大意:有m个宾客,n把雨伞,预计时间t后将会下大雨,告诉你每个宾客的位置和速度,每把雨伞的位置,问你最多几个宾客能够拿到伞. 解题分析: 本题就是要我们求人与伞之间的最大 ...

  6. 【HDOJ】4729 An Easy Problem for Elfness

    其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...

  7. 【题解】【直方图】【Leetcode】Trapping Rain Water

    Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...

  8. 【HDOJ】【3506】Monkey Party

    DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ...

  9. 【HDOJ】【3516】Tree Construction

    DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ...

随机推荐

  1. 各种SQL类型

    一.SQL:通常我们说的sql指的是最古老运用最方法的结构化查询语言(Structured Query Language),大部分人接触最多的是数据库查询使用,关系型数据库基本都支持. 二.T-SQL ...

  2. angularjs小知识

    字符串和对象的转化  :angular.fromJson(jsonStr) 对象转字符串 :angular.toJson(obj) jsonStr:json字符串 obj:对象

  3. Oracle学习【索引及触发器】

    索引B_Tree结构 请参照 响应图例 索引是一种允许直接访问数据表中某一数据行的树形结构,为了提高查询效率而引入,是独立于表的对象,可以存放在与表不同的表空间中.索引记录中存有索引关键字和指向表中数 ...

  4. c#数组的交集,差集,并集

    , , , , }; , , , , }; // 差集 var z1 = x.Except(y); foreach (var i in z1) { Console.Write(i + " & ...

  5. CSS3—CSS3和现代Web设计

    1.1 现代Web设计理念 1.1.1 可访问性第一 同样一段内容, 可以用成千上万的方法为其设计样式, 但全世界的用户应该依然可以访问它们, 不管他们用什么方式去访问Web——无论手机.键盘控制器还 ...

  6. SecureCRT、FileZilla使用Public证书登录Linux

    本文作者:Vinkn ,转载请注明出处http://www.cnblogs.com/Vinkn/ 一.简介 服 务器部署之后一般都配置了防火墙,一般也都开启了ssh,可以直接登录远程服务器,为了安全等 ...

  7. 百度地图Api 根据两个坐标点计算距离

    百度地图Android Sdk的Api里面,没有现成的直接获取两个坐标点之间距离的方法,但是,在jsapi里面,有直接计算距离的方法. class Point: pass def max(a,b): ...

  8. sec:authorize 标签 通过不通过权限例子

    1. 方式一     <sec:authorize ifAnyGranted="ROLE_A">     <a href="a.jsp"> ...

  9. Successfully installed matplotlib

    Installing /usr/local/lib/python2.7/dist-packages/matplotlib-1.4.0-py2.7-nspkg.pthSuccessfully insta ...

  10. php mysql PDO使用

    <?php $dbh = new PDO('mysql:host=localhost;dbname=access_control', 'root', ''); $dbh->setAttri ...