BZOJ 4080 Wf2014 Sensor Network 随机化

题目大意:给定平面上的n个点,求一个最大的点集,使得两两之间距离不超过d

爆搜T到死,加什么剪枝都没用……

随机化大法好

每次随机一个序列,依次贪心加入,然后更新答案

据说很靠谱?反正写完直接过了

#include <bitset>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 110
using namespace std;
typedef bitset<M> abcd;
struct Point{
    int x,y;
    friend istream& operator >> (istream &_,Point &p)
    {
        return scanf("%d%d",&p.x,&p.y),_;
    }
    friend bool operator < (const Point &p1,const Point &p2)
    {
        return p1.x < p2.x ;
    }
    friend int Distance(const Point &p1,const Point &p2)
    {
        return (p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y) ;
    }
}points[M];
int n,d;
abcd a[M];
abcd now,able,ans;
int main()
{
    int i,j;
    cin>>n>>d;
    for(i=1;i<=n;i++)
        cin>>points[i];
    for(i=1;i<=n;i++)
        for(j=i+1;j<=n;j++)
            if(Distance(points[i],points[j])<=d*d)
                a[i][j]=a[j][i]=true;
    static int order[M];
    for(i=1;i<=n;i++)
    {
        able[i]=true;
        order[i]=i;
    }
    for(j=1;j<=1000;j++)
    {
        abcd able=::able;
        now.reset();
        for(i=1;i<=n;i++)
            if(able[order[i]])
            {
                now[order[i]]=true;
                able&=a[order[i]];
            }
        if(now.count()>ans.count())
            ans=now;
        random_shuffle(order+1,order+n+1);
    }
    cout<<ans.count()<<endl;
    for(i=1;i<=n;i++)
        if(ans[i])
            printf("%d ",i);
    return 0;
}
时间: 2024-11-06 14:32:13

BZOJ 4080 Wf2014 Sensor Network 随机化的相关文章

【BZOJ4080】[Wf2014]Sensor Network 随机化

[BZOJ4080][Wf2014]Sensor Network Description 魔法炮来到了帝都,除了吃特色菜之外,还准备去尝一尝著名的北京烤鸭.帝都一共有n(1<=1<=100)个烤鸭店,可以看成是二维平面内的点.不过由于魔法炮在吃烤鸭之前没有带钱,所以吃完烤鸭之后只能留下刷盘子.刷完盘子之后,魔法炮除了不用付饭费之外,老板还会奖励他d(1<=d<=10000)元钱.魔法炮是一个特么喜欢吃烤鸭的孩子,所以在去过一家烤鸭店之后,魔法炮还准备去其他的烤鸭店.但是由于帝都路费

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

Sensor Network Time Limit: 2 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 魔法炮来到了帝都,除了吃特色菜之外,还准备去尝一尝著名的北京烤鸭. 帝都一共有n个烤鸭店,可以看成是二维平面内的点. 不过由于魔法炮在吃烤鸭之前没有带钱,所以吃完烤鸭之后只能留下刷盘子. 刷完盘子之后,魔法炮除了不用付饭费之外,老板还会奖励他d元钱. 魔法炮是一个特么喜欢吃烤鸭的孩子,所以在去过一家烤鸭店之后,魔法

【随机化】bzoj4080 [Wf2014]Sensor Network

#include<cstdio> #include<algorithm> #include<cmath> using namespace std; typedef double db; struct Point{int x,y,p;}p[101],path[101]; int n,m,ans,apa[101]; int sqr(int x){return x*x;} int dis(Point a,Point b){return sqr(a.x-b.x)+sqr(a.y

BZOJ 1146: [CTSC2008]网络管理Network [树上带修改主席树]

1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3522  Solved: 1041[Submit][Status][Discuss] Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条高速光缆组成. 每个部门都有一个专属的路由器,

BZOJ 1146: [CTSC2008]网络管理Network( 树链剖分 + 树状数组套主席树 )

树链剖分完就成了一道主席树裸题了, 每次树链剖分找出相应区间然后用BIT+(可持久化)权值线段树就可以完成计数. 但是空间问题很严重....在修改时不必要的就不要新建, 直接修改原来的..详见代码. 时间复杂度O(N*log^3(N)) ---------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<

BZOJ 4078: [Wf2014]Metal Processing Plant

4078: [Wf2014]Metal Processing Plant Time Limit: 100 Sec  Memory Limit: 128 MBSubmit: 86  Solved: 20[Submit][Status][Discuss] Description 定义集合S的价值D(S)为: 现在给你n个元素,并给出其中任意两个元素之间的d(i,j)值,要你将这些元素划分成两个集合A.B.求min{D(A)+D(B)}. 注:d(i,j)=d(j,i). Input 输入数据的第一行

BZOJ 1146: [CTSC2008]网络管理Network

1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3539  Solved: 1054[Submit][Status][Discuss] Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条高速光缆组成. 每个部门都有一个专属的路由器,

泛在传感器网络(Ubiquitous Sensor Network; USN)

http://wiki.mbalib.com/wiki/%E6%B3%9B%E5%9C%A8%E4%BC%A0%E6%84%9F%E5%99%A8%E7%BD%91%E7%BB%9C 什么是泛在传感器网络 泛在传感器网络是指由智能传感器结点组成的网络,可以以“任何地点.任何时间.任何人.任何物”的形式部署.该技术具有巨大的潜力,可用于在广泛领域内推动新的应用和服务,从安全保卫.环境监控到推动个人生产力和增强国家竞争力. [编辑] 泛在传感器网络的提出 此定义出自2008年2月ITU—T的研究报告

【BZOJ 1146】网络管理Network

Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路由器和N-1条高速光缆组成.每个部门都有一个专属的路由器,部门局域网内的所有机器都联向这个路由器,然后再通过这个通信子网与其他部门进行通信联络.该网络结构保证网络中的任意两个路由器之间都存在一条直接或间接路径以进行通信. 高速光缆的数据传输速度非常快,以至于利用光缆传输的延迟时间可以忽略.但是由于路由