【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[ ...
随机推荐
- linux find grep使用
在当前目录下所有文件中查找内容包含 string 的文件: find ./ -name "*" -exec grep "string" {} \; 注意:在最后 ...
- CentOS 6.7 配置nginx支持SSL/https访问
一.安装必要的包 yum install openssl openssl-devel 二.配置编译参数,增加对SSL的支持 ./configure –with-http_ssl_module 三.修改 ...
- xml--小结②XML的基本语法
二.XML的基本语法1.文档声明:作用:用于标识该文档是一个XML文档.注意事项:声明必须出现在文档的第一行(之前连空行都不能有,也不能有任何的注释) 最简单的XML声明:<?xml versi ...
- Java中OutOfMemoryError(内存溢出)的情况及解决办法
java.lang.OutOfMemoryError: Java heap space // TODO Auto-generated method stub Vector v = new Vector ...
- TP-LINK wr703n openwrt 挂载 U盘
1.首先设置好DNS 2.点SYSTEM 点SOFTWARE 更新软件列表 3.安装下列软件: block-mount kmod-usb-storage kmod-fs-ext4 e2fsprogs ...
- Windows 服务与 Web 服务
两个完全不同的东西. Windows 服务,伴随着windows的启动而启动,主要处理长时间监听的任务. Web服务,基于Web,部署在服务器上,用于处理客户端的请求.
- why slow thinking wins
今天Hacker News上的一篇文章<为什么想得慢的人能赢>引起了广泛的讨论. 网友Scott Burson在文章后评论说:"之前,我雇佣了一位TopCoder冠军,原本预计他 ...
- Java设计模式(学习整理)---命令模式
设计模式之Command(学习整理) 1.Command定义 不少Command模式的代码都是针对图形界面的,它实际就是菜单命令,我们在一个下拉菜单选择一个命令时,然后会执行一些动作. 将这些命令封装 ...
- c++预编译问题:fatal error C1083: Cannot open precompiled header file: 'Debug/DllTest.pch': No such file or d
1)单独编译StdAfx.cpp 2)编译所有(即按Ctrl+F7) 这时因为该模块没有包括预编译头文件“stdafx.h”的缘故.VC用一个stdafx.cpp包含头文件stdafx.h,然后在st ...
- 更改css element.style
样式后面加 !important就可以更改element.style的优先级了