hdu 2389 Rain on your Parade (二分图,Hopcroft-Karp)
来源:互联网 发布:尚观java 编辑:程序博客网 时间:2024/05/16 07:42
地图上一些人,一些伞,每个人都有一个速度,问最多能有多少人能在下雨之前躲到伞里面。雨将会在t分钟后来临。
#include<iostream>#include<math.h>#include<stdio.h>#include<algorithm>#include<string.h>#include<vector>#include<queue>#include<map>#include<set>#define B(x) (1<<(x))using namespace std;typedef long long ll;void cmax(int& a,int b){ if(b>a)a=b; }void cmin(int& a,int b){ if(b<a)a=b; }void cmax(ll& a,ll b){ if(b>a)a=b; }void cmin(ll& a,ll b){ if(b<a)a=b; }void add(int& a,int b,int mod){ a=(a+b)%mod; }void add(ll& a,ll b,ll mod){ a=(a+b)%mod; }const int oo=0x3f3f3f3f;const int MOD=1000000007;const int maxn=6666;const int maxm=44435556;int vis[maxn];int x[maxn],y[maxn];int dx[maxn],dy[maxn];int dis,n;struct EDGE{ int v,next;}E[maxm];int head[maxn],tol;struct Node{ int x,y,sp;}a[maxn],b[maxn];void Init(){ memset(head,-1,sizeof head); tol=0;}void add_edge(int u,int v){ E[tol].v=v; E[tol].next=head[u]; head[u]=tol++;}bool bfs(){ memset(dx,-1,sizeof dx); memset(dy,-1,sizeof dy); dis=oo; queue<int>q; for(int i=1;i<=n;i++){ if(x[i]==-1){ q.push(i); dx[i]=0; } } while(!q.empty()){ int u=q.front();q.pop(); if(dx[u]>dis)break; for(int i=head[u];i!=-1;i=E[i].next){ int v=E[i].v; if(dy[v]==-1){ dy[v]=dx[u]+1; if(y[v]==-1)dis=dy[v]; else{ dx[y[v]]=dy[v]+1; q.push(y[v]); } } } } return dis!=oo;}int dfs(int u){ for(int i=head[u];i!=-1;i=E[i].next){ int v=E[i].v; if(!vis[v]&&dy[v]==dx[u]+1){ vis[v]=1; if(y[v]!=-1&&dy[v]==dis)continue; if(y[v]==-1||dfs(y[v])){ x[u]=v; y[v]=u; return 1; } } } return 0;}int Match(){ memset(x,-1,sizeof x); memset(y,-1,sizeof y); int ans=0; while(bfs()){ memset(vis,0,sizeof vis); for(int i=1;i<=n;i++)if(x[i]==-1){ ans+=dfs(i); } } return ans;}int main(){ //freopen("E:\\read.txt","r",stdin); int u,v,t,N,M,T; scanf("%d",&T); for(int cas=1;cas<=T;cas++){ Init(); scanf("%d",&t); scanf("%d",&N); for(int i=1;i<=N;i++){ scanf("%d %d %d",&a[i].x,&a[i].y,&a[i].sp); } scanf("%d",&M); for(int i=1;i<=M;i++){ scanf("%d %d",&b[i].x,&b[i].y); } n=N+M; for(int i=1;i<=N;i++){ for(int j=1;j<=M;j++){ if(abs(a[i].x-b[j].x)+abs(a[i].y-b[j].y)<=a[i].sp*t) add_edge(i,j+N); } } printf("Scenario #%d:\n%d\n\n",cas,Match()); } return 0;}
0 0
- hdu 2389 Rain on your Parade (二分图,Hopcroft-Karp)
- hdu 2389 Rain on your Parade(二分图最大匹配,Hopcroft-Karp)
- HDU-2389 Rain on your Parade(二分图之Hopcroft-Karp算法)
- Hopcroft-Karp 二分图HDU2389 Rain on your Parade
- HDU-2389-Rain on your Parade [二分匹配][Hopcroft-Carp]
- HDU2389-Rain on your Parade(二分图匹配Hopcroft-Karp算法)
- HDU-2389 Rain on your Parade 裸Hopcroft–Karp algorithm
- hdu 2389 Rain on your Parade(最大匹配,Hopcroft-Karp算法模版)
- HDU 2389 Rain on your Parade (二分图匹配(Hopcroft-Carp的算法模板))
- hdu2389 Rain on your Parade (最大匹配Hopcroft--Karp)
- 【HDU】2389 Rain on your Parade 二分匹配 Hopcroft-Krap算法
- hdu 2389 Rain on your Parade(二分匹配Hopcroft-Carp算法模版)
- HDU 2389 Rain on your Parade(二分匹配+Hopcroft-Carp算法模板题)
- HDU 2389Rain on your Parade (HK二分图)
- HDU2389Rain on your Parade 二分匹配Hopcroft-Karp
- hdu2389 Rain on your Parade(二分匹配hopcroft-carp算法)
- HDU2389Rain on your Parade(二分图最大匹配之Hopcroft-Karp)
- hdu 2389 Rain on your Parade 二分匹配 HK算法
- Windows设备驱动程序StartIO、IRP同步/异步上机小结
- 一个简单的变换——图像的平滑处理
- 模板-计算几何
- apache DBUtils 使用例子demo
- 模板-数据结构
- hdu 2389 Rain on your Parade (二分图,Hopcroft-Karp)
- USACO——Friday the Thirteenth 黑色星期五
- 黑马程序员--java常用的四种排序
- 人最重要的能力是什么?
- 【Leetcode】Combination Sum II
- USACO——Broken Necklace 坏掉的项链
- Google推荐的图片加载库Glide介绍
- C++的字符串
- 7.4 FIN及其ACK的接收