地鼠的困境SSL1333 最大匹配
2016-06-21 22:03
274 查看
题目大意
地鼠家族一共有N个地鼠和M个鼠洞,每个都位于不同的(x, y)坐标中。假如有地鼠在发觉危险以后s秒内都没有回到鼠洞里的话,就可能成为老鹰的食物。当然了,一个鼠洞只能拯救一只地鼠的命运,所有地鼠都以相等的速度v移动。地鼠家族需要设计一种策略,使得老鹰来时,易受攻击的地鼠数量最少。
分析
是一个最大匹配问题;
输入时判断每一只地鼠分别可以去哪些洞,连线。
代码
地鼠家族一共有N个地鼠和M个鼠洞,每个都位于不同的(x, y)坐标中。假如有地鼠在发觉危险以后s秒内都没有回到鼠洞里的话,就可能成为老鹰的食物。当然了,一个鼠洞只能拯救一只地鼠的命运,所有地鼠都以相等的速度v移动。地鼠家族需要设计一种策略,使得老鹰来时,易受攻击的地鼠数量最少。
分析
是一个最大匹配问题;
输入时判断每一只地鼠分别可以去哪些洞,连线。
代码
var a:array[1..5000,1..5000] of boolean; v:array[1..30000] of boolean; x,y:array[1..10000] of real; st:array[1..30000] of longint; i,j,k:longint; x1,y1:real; n,m,nm:longint; z:longint; v1,s:longint; function find(r:longint):boolean; var i,j,k:longint; begin find:=true; for i:=1 to n do begin if not v[i] and a[r,i] then begin k:=st[i]; st[i]:=r; v[i]:=true; if (k=0) or find(k) then exit; st[i]:=k; end; end; find:=false; end; procedure main; var i,j,k:longint; z:boolean; begin for i:=1 to n do begin fillchar(v,sizeof(v),0); z:=find(i); end; end; begin readln(nm); for z:=1 to nm do begin fillchar(a,sizeof(a),false); fillchar(st,sizeof(st),0); readln(n,m,s,v1); for i:=1 to n do readln(x[i],y[i]); for i:=1 to m do begin readln(x1,y1); for j:=1 to n do begin if sqrt(sqr(x[j]-x1)+sqr(y[j]-y1))/v1<=s then a[j,i]:=true end; end; main; j:=0; for i:=1 to m do if st[i]<>0 then j:=j+1; writeln(n-j); end; end.
相关文章推荐
- 【4】重建二叉树
- Mac OS X与远程linux服务器文件传输
- Java四种线程池的使用
- hadoop提示Could not reserve enough space for object heap
- 构造器优化——静态工厂和构建器
- 跟着SY速学Ubuntu系列四:编译安装PHP7下面的memcached扩展
- [PHP] 试题系统研究
- android 鼠标滚轮事件监听
- 你可能不知道的 NaN 以及 underscore 1.8.3 _.isNaN 的一个 BUG
- C#正则表达式匹配字符串
- Servlet与JSP九大内置对象的对应关系
- 剑指offer题解 包含min函数的栈
- win7不想更新win10也会下载win10安装包,而且有时会自动更新
- android产品研发(十三)-->App轮训操作
- 解决Discuz:对不起,您安装的不是正版应用,安装程序无法继续执行
- Android小记
- 祝贺:神威太湖之光夺冠Top500,采用国产众核处理器SW26010
- 【海岛帝国系列赛】No.3 海岛帝国:运输资源
- Underscore学习(2)
- 单用户模式修改root密码