poj2536 hungary+坐标
2014-04-28 20:28
309 查看
题意:给出若干老鼠坐标、若干洞坐标、老鼠奔跑速度和限制时间。已知一个洞最多躲一个老鼠,问在限制时间内最少有多少老鼠跑不回洞。
思路:建图的时候添加判断,如果一个老鼠能在限制时间内跑回洞则有边,剩下的hungary模板。
思路:建图的时候添加判断,如果一个老鼠能在限制时间内跑回洞则有边,剩下的hungary模板。
#include <stdio.h> #include <string.h> #include <math.h> #define N 102 struct point{ double x,y; }mice ,hole ; struct { int y,next; }e[N*N]; int n,m,res; double time,v; int first ,used ,link ,top; void init(){ top = res = 0; memset(first,-1,sizeof(first)); memset(link,-1,sizeof(link)); } void add(int x,int y){ e[top].y = y; e[top].next = first[x]; first[x] = top++; } int check(int a,int b){ double dis = sqrt((mice[a].x-hole[b].x)*(mice[a].x-hole[b].x)+(mice[a].y-hole[b].y)*(mice[a].y-hole[b].y)); return dis/v < time; } int dfs(int i){ int j,y; for(j = first[i];j!=-1;j=e[j].next){ y = e[j].y; if(!used[y]){ used[y] = 1; if(link[y] == -1||dfs(link[y])){ link[y] = i; return 1; } } } return 0; } int hungary(){ int i; for(i = 1;i<=n;i++){ memset(used,0,sizeof(used)); if(dfs(i)) res++; } return n-res; } int main(){ freopen("a.txt","r",stdin); while(scanf("%d %d",&n,&m)!=EOF){ int i,j,num; init(); scanf("%lf %lf",&time,&v); for(i = 1;i<=n;i++) scanf("%lf %lf",&mice[i].x,&mice[i].y); for(i = 1;i<=m;i++) scanf("%lf %lf",&hole[i].x,&hole[i].y); for(i = 1;i<=n;i++) for(j = 1;j<=m;j++) if(check(i,j)) add(i,j); printf("%d\n",hungary()); } return 0; }
相关文章推荐
- 地图坐标助手-开发总结
- Android View的几个位置坐标关系
- FusionCharts:横坐标标签较长时显示方式
- 整理下PC和移动获取点击、移动坐标的代码和坑
- excel中将经纬度坐标转换成十进制度的方法
- 第1周 项目(A)-10坐标转换
- IOS中二维坐标变换
- [10秒学会] - iOS UIView中的坐标转换 convertRect
- Android OnTouchListener实时监听触点坐标,需要同时监听OnClickListener才有效
- iOS开发笔记15:地图坐标转换那些事、block引用循环/weak–strong dance、UICollectionviewLayout及瀑布流、图层混合
- 百度地图API详解之地图坐标系统
- 原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y【转】
- Android OpenGL es 纹理坐标设定与贴图规则
- 百度地图-设置中性点坐标
- c#鼠标三种相对坐标
- 屏幕坐标设置颜色变化(根据透视x坐标实现一个红色光带)
- [Maven Essentials] 坐标和依赖
- PostGIS+postgresql建立坐标位置计算
- 使用SVG内置API计算图形或点经过transform之后的新坐标
- OpenCV坐标体系+minMaxLoc的使用细节