分组赛时wy大神讲的题,网上都是随机化的题解

我来讲一下正解吧,我们穷举两个点,这两点距离要小于限制

然后我们分别以这两个点为圆心,两点距离为半径画圆

圆圆相交的部分被两点练成线段划分成两部分,不难发现

每个部分内点点之间的距离是小于限制的,很明显想到二分图

对于上半部分与下半部分的两点,如果距离大于限制则连边

然后我们求最大点独立集即可

求最大独立集的方案各种想错,实在太SB

做完最大匹配后首先先把未匹配的点拉出来,然后把他们有边相连的点都标记

然后处理每对匹配,若一个点被标记则选另一个点

这样是不可能出现两个点都标记的匹配,因为这样就会出现一条增广路,与最大匹配矛盾

type node=record
po,next:longint;
end; var e,ee:array[..] of node;
q,q1,q2,c,x,y,cy,cx,p:array[..] of longint;
v,v1,v2:array[..] of boolean;
z,ll,d,t1,t2,i,j,k,l,ans,len,n:longint; procedure add(x,y:longint);
begin
inc(len);
e[len].po:=y;
e[len].next:=p[x];
p[x]:=len;
ee[len].po:=x;
ee[len].next:=q[y];
q[y]:=len;
end; function dfs(x:longint):longint;
var i,y:longint;
begin
i:=p[x];
while i<> do
begin
y:=e[i].po;
if not v[y] then
begin
v[y]:=true;
if (cy[y]=-) or (dfs(cy[y])=) then
begin
cy[y]:=x;
cx[x]:=y;
exit();
end;
end;
i:=e[i].next;
end;
exit();
end; function match:longint;
var i:longint;
begin
fillchar(cy,sizeof(cy),);
fillchar(cx,sizeof(cx),);
match:=t1+t2;
if (t2=) or (t1=) then exit;
for i:= to t1 do
if cx[i]=- then
begin
fillchar(v,sizeof(v),false);
match:=match-dfs(i);
end;
end; function cross(i,j,k:longint):longint;
begin
exit((x[i]-x[k])*(y[j]-y[k])-(x[j]-x[k])*(y[i]-y[k]));
end; function dis(i,j:longint):longint;
begin
exit(sqr(x[i]-x[j])+sqr(y[i]-y[j]));
end; begin
readln(n,d);
d:=d*d;
for i:= to n do
readln(x[i],y[i]);
ans:=;
c[]:=;
for i:= to n- do
for j:=i+ to n do
if dis(i,j)<=d then
begin
ll:=dis(i,j);
t1:=;
t2:=;
fillchar(p,sizeof(p),);
fillchar(q,sizeof(q),);
len:=;
for k:= to n do
if (dis(i,k)<=ll) and (dis(j,k)<=ll) then
begin
if cross(k,j,i)>= then
begin
inc(t1);
q1[t1]:=k;
end
else begin
inc(t2);
q2[t2]:=k;
end;
end;
for k:= to t1 do
for l:= to t2 do
if dis(q1[k],q2[l])>d then add(k,l); l:=match;
if l>ans then
begin
ans:=;
fillchar(v1,sizeof(v1),false);
fillchar(v2,sizeof(v2),false);
for k:= to t1 do
if cx[k]=- then
begin
inc(ans);
c[ans]:=q1[k];
z:=p[k];
while z<> do
begin
v2[e[z].po]:=true;
z:=e[z].next;
end;
end; for k:= to t2 do
if cy[k]=- then
begin
inc(ans);
c[ans]:=q2[k];
z:=q[k];
while z<> do
begin
v1[ee[z].po]:=true;
z:=ee[z].next;
end;
end; for k:= to t1 do
if cx[k]<>- then
begin
inc(ans);
if not v1[k] then c[ans]:=q1[k]
else c[ans]:=q2[cx[k]];
end;
end;
end;
writeln(ans);
for i:= to ans do
write(c[i],' ');
writeln;
end.

bzoj4080的更多相关文章

  1. 【随机化】bzoj4080 [Wf2014]Sensor Network

    #include<cstdio> #include<algorithm> #include<cmath> using namespace std; typedef ...

  2. 【BZOJ4080】【WF2014】Sensor Network [随机化]

    Sensor Network Time Limit: 2 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 魔法炮来到了帝都 ...

  3. 【bzoj4080】[Wf2014]Sensor Network 随机化

    题目描述 魔法炮来到了帝都,除了吃特色菜之外,还准备去尝一尝著名的北京烤鸭.帝都一共有n(1<=1<=100)个烤鸭店,可以看成是二维平面内的点.不过由于魔法炮在吃烤鸭之前没有带钱,所以吃 ...

随机推荐

  1. Eclipse启动的时候窗口一闪就关的解决办法(转)

    有时候会碰到如题这种问题,从网上查知解决办法,非常管用 为eclipse.exe创建一个快捷方式,然后快捷方式上右键-属性,在目标栏填入 E:\eclipse\eclipse.exe -vm &quo ...

  2. linux xampp常见问题

    一.常见问题 1.安装xampp4linux后,只能本机(http://localhost)访问,局域网内其他机器无法访问 解答:在/opt/lampp/etc中修改httpd.conf,将Liste ...

  3. WPF九宫格HLSL版

    偶遇需要再WPF里面处理九宫格,因不喜截图缩放,即写成了HLSL的Effcect sampler2D input : register(s0); /// <summary>The floa ...

  4. 历时一周,unity3d+xtion打造我的第一个休闲体感小游戏《空降奇兵》

    1.游戏介绍 本游戏属于休闲小游戏,主要操作如下: 菜单控制:举起左手或右手,点击左边或者右边的菜单:挥动左手或右手,选择关卡: 操作方式:玩家跳跃,游戏中的伞兵从飞机开始降落:玩家通过控制伞兵的左右 ...

  5. BAT CMD 批处理文件脚本 -2

    http://checheng1988.blog.51cto.com/4725808/1090733 在很多windows程序中会见到很多用扩展名为.bat和.cmd结尾的文件,那么这些文件能干什么呢 ...

  6. CodeForces 173B Chamber of Secrets 二分图+最短路

    题目链接: http://codeforces.com/problemset/problem/173/B 题意: 给你一个n*m的地图,现在有一束激光从左上角往左边射出,每遇到‘#’,你可以选择光线往 ...

  7. 使用highcharts 绘制Web图表

    问题描述:     使用highcharts 绘制Web图表 Highcharts说明: 问题解决:     (1)安装Highcharts     在这些图表中,数据源是一个典型的JavaScrip ...

  8. 【BZOJ】【2594】【WC2006】水管局长数据加强版

    LCT 动态维护MST嘛……但是有删边= =好像没法搞的样子 离线记录所有修改&询问,倒序处理,就可以变删边为加边了- 论如何用LCT维护最小生成树:先搞出一棵最小生成树,然后每次加边(u,v ...

  9. mutable关键字

    mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词.在C++中,mutable也是为了突破const的限制而设置的.被mutable修饰的变量(muta ...

  10. CKeditor 配置使用

    CKeditor 配置使用 一.使用方法:1.在页面<head>中引入ckeditor核心文件ckeditor.js<script type="text/javascrip ...