博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 2536 匈牙利算法
阅读量:4961 次
发布时间:2019-06-12

本文共 1072 字,大约阅读时间需要 3 分钟。

思路:最大匹配 (很裸)

// by SiriusRen#include 
#include
#include
using namespace std;#define N 205int n,tot=0,first[N],v[N*N],next[N*N],m,s,V,vis[N],fa[N],ans=0;double ax[N],ay[N],bx[N],by[N];void add(int x,int y){v[tot]=y,next[tot]=first[x],first[x]=tot++;}bool dfs(int x){ for(int i=first[x];~i;i=next[i]) if(!vis[v[i]]){ vis[v[i]]=1; if(!fa[v[i]]||dfs(fa[v[i]])){ fa[v[i]]=x;return 1; } } return 0;}int main(){ while(~scanf("%d%d%d%d",&n,&m,&s,&V)){ tot=ans=0,memset(fa,0,sizeof(fa)),memset(first,-1,sizeof(first)); for(int i=1;i<=n;i++)scanf("%lf%lf",&ax[i],&ay[i]); for(int i=1;i<=m;i++)scanf("%lf%lf",&bx[i],&by[i]); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(sqrt((bx[j]-ax[i])*(bx[j]-ax[i])+(by[j]-ay[i])*(by[j]-ay[i]))<=(double)s*V)add(i,n+j); for(int i=1;i<=n;i++,memset(vis,0,sizeof(vis)))if(dfs(i))ans++; printf("%d\n",n-ans); }}

这里写图片描述

转载于:https://www.cnblogs.com/SiriusRen/p/6532353.html

你可能感兴趣的文章
jQuery 基础学习
查看>>
一个简单的 MVVM 实现
查看>>
CABasicAnimation
查看>>
UML建模——用例图(Use Case Diagram)
查看>>
LINUX诞生
查看>>
大学毕业一个月的微型总结
查看>>
Linuxer-&quot;Linux开发人员自己的媒体&quot;第五月稿件和赠书名单
查看>>
unittest -官网文档学习笔记-TestCase class
查看>>
unbuntu 安装一些常用软件
查看>>
软件工程实践第二次作业
查看>>
ansible入门01
查看>>
Rails 自定义验证的错误信息
查看>>
图论(对偶图):COGS 470. [NOI2010]海拔
查看>>
第三方类AFNetworking
查看>>
Enterprise Library 2.0 -- Cryptography Application Block
查看>>
简单的发邮件功能实现
查看>>
velocity模板引擎学习(3)-异常处理
查看>>
OllyDBG 1.10
查看>>
[svc][op]杀进程
查看>>
linux安装jdk
查看>>