【HDOJ】2389 Rain on your Parade
读题显然是二分图匹配,看成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的更多相关文章
- 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 ...
- 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 ...
- HDOJ 2389 Rain on your Parade
HK.... Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K ...
- 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 ...
- HDU 2389 Rain on your Parade 最大匹配(模板题)【HK算法】
<题目链接> 题目大意:有m个宾客,n把雨伞,预计时间t后将会下大雨,告诉你每个宾客的位置和速度,每把雨伞的位置,问你最多几个宾客能够拿到伞. 解题分析: 本题就是要我们求人与伞之间的最大 ...
- 【HDOJ】4729 An Easy Problem for Elfness
其实是求树上的路径间的数据第K大的题目.果断主席树 + LCA.初始流量是这条路径上的最小值.若a<=b,显然直接为s->t建立pipe可以使流量最优:否则,对[0, 10**4]二分得到 ...
- 【题解】【直方图】【Leetcode】Trapping Rain Water
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- 【HDOJ】【3506】Monkey Party
DP/四边形不等式 裸题环形石子合并…… 拆环为链即可 //HDOJ 3506 #include<cmath> #include<vector> #include<cst ...
- 【HDOJ】【3516】Tree Construction
DP/四边形不等式 这题跟石子合并有点像…… dp[i][j]为将第 i 个点开始的 j 个点合并的最小代价. 易知有 dp[i][j]=min{dp[i][j] , dp[i][k-i+1]+dp[ ...
随机推荐
- sqlite 获取数据库中的所有表
SELECT name from sqlite_master where type='table'
- Spring Mvc session拦截器实现
Spring Mvc拦截器实现session过期跳转到登录页面 配置拦截器 <mvc:interceptors> <mvc:interceptor> <mvc:mappi ...
- 【转】Web前端开发规范文档
规范目的: 使开发流程更加规范化. 通用规范: TAB键用两个空格代替(WINDOWS下TAB键占四个空格,LINUX下TAB键占八个空格). CSS样式属性或者JAVASCRIPT代码后加“;”方便 ...
- shit-------------mysql没有full join 语句
弄了好久,结果发现-------- 因为mysql没有full join这个东西 你只能写成 sleect * from A left join B on A.id=B.idunionselect * ...
- [时间操作] C#TimeHelper时间格式化帮助类 (转载)
点击下载 TimeHelper.rar 主要功能如下 .将时间格式化成 年月日 的形式,如果时间为null,返回当前系统时间 .将时间格式化成 时分秒 的形式,如果时间为null,返回当前系统时间 . ...
- LCS最长公共子序列HDU1159
最近一直在学习算法,基本上都是在学习动态规划以及字符串.当然,两者交集最经典之一则是LCS问题. 首先LCS的问题基本上就是在字符串a,b之间找到最长的公共子序列,比如 YAOLONGBLOG 和 Y ...
- 可编辑tab选项卡
效果如图所示,基于jq开发的,用原生可能会麻烦点.所以我没写. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...
- Trac的使用思考
为什么要使用Trac? 这是由于在软件开发当中需要设定阶段性的目标,和进行文档的统一归档,并且便于进行多人协同工作. Trac是基于Python开发的.所以要使用Trac就需要对于Python有一定的 ...
- Linux下彻底卸载LibreOffice方法
Linux下彻底卸载LibreOffice方法 终端中输入命令: 对所有基于 Debian 的发行版(Debian.Ubuntu.Kubuntu.Xubuntu.*buntu.Sidux 等): su ...
- MVC中的文件上传-小结
web开发中,文件的上传是非常基本功能之一. 在asp.net中,通常做法是利用webservice 来接收文件请求,这样做的好处就是全站有了一个统一的文件上传接口,并且根据网站的实际情况,可以将we ...