Rain on your Parade HDU - 2389 (hc板题)
在客人能够拿到的伞与客人之间建边 跑hc就好了。。。。
看看别人的:https://blog.csdn.net/wall_f/article/details/8248350
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
using namespace std; const int MAXN = ;
const int MAXM = *;
const int INF = 0x3f3f3f3f; struct Edge
{
int v;
int next;
}edge[MAXM]; struct node
{
double x, y;
double v;
}a[MAXN], b[MAXN]; int nx, ny;
int cnt;
int t;
int dis; int first[MAXN];
int xlink[MAXN], ylink[MAXN];
int dx[MAXN], dy[MAXN];
int vis[MAXN]; void init()
{
cnt = ;
memset(first, -, sizeof(first));
memset(xlink, -, sizeof(xlink));
memset(ylink, -, sizeof(ylink));
} void read_graph(int u, int v)
{
edge[cnt].v = v;
edge[cnt].next = first[u], first[u] = cnt++;
} int bfs()
{
queue<int> q;
dis = INF;
memset(dx, -, sizeof(dx));
memset(dy, -, sizeof(dy));
for(int i = ; i < nx; i++)
{
if(xlink[i] == -)
{
q.push(i);
dx[i] = ;
}
}
while(!q.empty())
{
int u = q.front(); q.pop();
if(dx[u] > dis) break;
for(int e = first[u]; e != -; e = edge[e].next)
{
int v = edge[e].v;
if(dy[v] == -)
{
dy[v] = dx[u] + ;
if(ylink[v] == -) dis = dy[v];
else
{
dx[ylink[v]] = dy[v]+;
q.push(ylink[v]);
}
}
}
}
return dis != INF;
} int find(int u)
{
for(int e = first[u]; e != -; e = edge[e].next)
{
int v = edge[e].v;
if(!vis[v] && dy[v] == dx[u]+)
{
vis[v] = ;
if(ylink[v] != - && dy[v] == dis) continue;
if(ylink[v] == - || find(ylink[v]))
{
xlink[u] = v, ylink[v] = u;
return ;
}
}
}
return ;
} int MaxMatch()
{
int ans = ;
while(bfs())
{
memset(vis, , sizeof(vis));
for(int i = ; i < nx; i++) if(xlink[i] == -)
{
ans += find(i);
}
}
return ans;
} /*double dist(const node a, const node b) //TLE,无力吐槽了
{
return sqrt(pow((a.x-b.x), 2.0) + pow((a.y-b.y), 2.0));
}*/ double dist(const node a, const node b)
{
return sqrt((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));
} void read_case()
{
init();
int Time;
scanf("%d", &Time);
scanf("%d", &nx);
for(int i = ; i < nx; i++)
{
scanf("%lf%lf%lf", &a[i].x, &a[i].y, &a[i].v);
}
scanf("%d", &ny);
for(int i = ; i < ny; i++)
{
scanf("%lf%lf", &b[i].x, &b[i].y);
}
for(int i = ; i < nx; i++)
{
for(int j = ; j < ny; j++)
{
double limit = a[i].v*Time;
double s = dist(a[i], b[j]);
if(s <= limit) read_graph(i, j);
}
}
} void solve()
{
read_case();
int ans = MaxMatch();
printf("%d\n\n", ans); //注意格式
} int main()
{
int T, times = ;
scanf("%d", &T);
while(T--)
{
printf("Scenario #%d:\n", ++times);
solve();
}
return ;
}
Rain on your Parade HDU - 2389 (hc板题)的更多相关文章
- (匹配 Hopcroft-Karp算法)Rain on your Parade -- Hdu --2389
链接: http://acm.hdu.edu.cn/showproblem.php?pid=2389 不能用匈牙利,会TEL的,用Hopcroft-Karp Hopcroft-Karp课件 以前是寻找 ...
- F - Rain on your Parade - hdu 2389(二分图匹配,Hk算法)
题意:给一些人和一些伞的坐标,然后每个人都有一定的速度,还有多少时间就会下雨,问最多能有多少人可以拿到伞. 分析:题意很明确,可以用每个人和伞判断一下是否能够达到,如果能就建立一个联系.不过这道题的数 ...
- 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 ...
- 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 ...
- HDOJ 2389 Rain on your Parade
HK.... Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K ...
- Hdu 3289 Rain on your Parade (二分图匹配 Hopcroft-Karp)
题目链接: Hdu 3289 Rain on your Parade 题目描述: 有n个客人,m把雨伞,在t秒之后将会下雨,给出每个客人的坐标和每秒行走的距离,以及雨伞的位置,问t秒后最多有几个客人可 ...
- Rain on your Parade
Rain on your Parade Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 655350/165535 K (Java/Ot ...
- Hdu2389 Rain on your Parade (HK二分图最大匹配)
Rain on your Parade Problem Description You’re giving a party in the garden of your villa by the sea ...
随机推荐
- python高速排序
import random def rand(n): for i in range(n): yield random.randint(0,1000) #创建一个随机数列表 def createList ...
- (.DS_Store)避免多人提交代码到GitHub上起冲突
在多人合作的项目里,git pull origin master执行完之后出现以下问题: Auto-merging .DS_Store CONFLICT (content): Merge confli ...
- 20155234 Exp2 后门原理与实践
Windows获得Linux Shell 1.查看ip 2.监听端口 3.实验成功如下图 Linux获得Win Shell 1.查看虚拟机ip 2.监听端口 3.实验成功如下图 使用NC传输数据 1. ...
- Java中枚举的写法和用法
在公司代码中,用了一大堆的枚举,看得我好懵逼.下面开始看看枚举怎么写和怎么用. 一.枚举的写法 关于枚举的写法,网上好多这方面的知识.这里直接贴一个我自己写的枚举类的代 ...
- 分类-MNIST(手写数字识别)
这是学习<Hands-On Machine Learning with Scikit-Learn and TensorFlow>的笔记,如果此笔记对该书有侵权内容,请联系我,将其删除. 这 ...
- 《图说VR入门》——DeepoonVR的大鹏(陀螺仪)枪
<图说VR入门>--VR大朋的(陀螺仪)枪 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接: http://blog.csdn.net/cartzhang/ar ...
- 列表生成式+过滤器(filter)+映射(map)+lambda总结
这些都是python的特色,不仅强大,而且好用,配合起来使用更是无敌. 零.lambda lambda用于产生一个匿名表达式,组成部分为:lambda + ‘函数表达式’ ‘函数表达式’由一个冒号加上 ...
- Grid布局20行代码快速生成瀑布流
网格布局 Grid 布局,好用又简单,至少比 Flex 要人性化一点,美中不足就是浏览器支持度差点. DOM结构 中间夹层为了后续拓展. CSS .grid { display: grid; grid ...
- 重置Oracle配置
经常被ORACLE坑,作为一个只需要开发时候连连ORACLE的程序员,在经历了一次又一次的折腾之后,决定还是把这些琐碎的事情写下来. 经常在虚拟机中使用ORACLE,ORACLE的网络配置有一些变化就 ...
- 软件工程第二次作业(JUnit的使用)
初次使用JUnit 感谢学习资源Junit使用的超简单介绍源 一.开发环境及界面截图: 系统 Windows 10 编辑器 eclipse 语言 ...