题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1822

题意:WJJ喜欢“魔兽争霸”这个游戏。在 游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵。我们认为,巫妖和小精灵都可以看成是平面上的点。 当巫妖和小精灵之间的直线距离不超过R,且巫妖看到小精灵的视线没有被树木阻挡(也就是说,巫妖和小精灵的连线与任何树木都没有公共点)的话,巫妖就可以 瞬间杀灭一个小精灵。 在森林里有N个巫妖,每个巫妖释放Frozen Nova之后,都需要等待一段时间,才能再次施放。不同的巫妖有不同的等待时间和施法范围,但相同的是,每次施放都可以杀死一个小精灵。 现在巫妖的头目想知道,若从0时刻开始计算,至少需要花费多少时间,可以杀死所有的小精灵?

思路:预处理每个巫妖可以杀死的精灵。之后 二分答案最大流判可行性。但是我觉得这个数据有问题。下面这个预处理是用的别人的。我原来写的是WA。但是我觉得这个预处理是有bug的。他是直接相当于 求树到巫妖和精灵连线的距离小于树的半径。但是我觉得这个不对的。比如巫妖和精灵在树的同一侧。

struct node
{
    int v,cap,next;
};

node edges[N*N];
int head[N],e;

void add(int u,int v,int cap)
{
    edges[e].v=v;
    edges[e].cap=cap;
    edges[e].next=head[u];
    head[u]=e++;
}

void Add(int u,int v,int cap)
{
    add(u,v,cap);
    add(v,u,0);
}

int cur[N],h[N],num[N],pre[N];

int Maxflow(int s,int t,int n)
{
    int i;
    for(i=0;i<=n;i++) h[i]=num[i]=0,cur[i]=head[i];
    int u=s,ans=0,Min,k,x;
    while(h[u]<n)
    {
        if(u==t)
        {
            Min=INF+1;
            for(i=s;i!=t;i=edges[cur[i]].v)
            {
                x=cur[i];
                if(edges[x].cap<Min) Min=edges[x].cap,k=i;
            }
            ans+=Min; u=k;
            for(i=s;i!=t;i=edges[cur[i]].v)
            {
                x=cur[i];
                edges[x].cap-=Min;
                edges[x^1].cap+=Min;
            }
        }
        for(i=cur[u];i!=-1;i=edges[i].next)
        {
            if(edges[i].cap>0&&h[u]==1+h[edges[i].v])
            {
                break;
            }
        }
        if(i!=-1)
        {
            cur[u]=i;
            pre[edges[i].v]=u;
            u=edges[i].v;
        }
        else
        {
            if(--num[h[u]]==0) break;
            cur[u]=head[u];
            x=n;
            for(i=head[u];i!=-1;i=edges[i].next)
            {
                k=edges[i].v;
                if(edges[i].cap>0&&h[k]<x) x=h[k];
            }
            h[u]=x+1;
            num[x+1]++;
            if(u!=s) u=pre[u];
        }
    }
    return ans;
}

struct A
{
    int x,y,r,t;

    void get()
    {
        RD(x,y); RD(r,t);
    }
};

A a[N];

struct B
{
    int x,y;
    void get()
    {
        RD(x,y);
    }
};

B b[N];

struct C
{
    int x,y,r;

    void get()
    {
        RD(x,y,r);
    }
};

C c[N];

int n,m,K;
vector<int> V[N];

int dis(int x,int y)
{
    return x*x+y*y;
}

int check(A pa,B pb,C pc)
{
    double a=sqrt(dis(pa.x-pb.x,pa.y-pb.y)*1.0);
    double b=sqrt(dis(pc.x-pb.x,pc.y-pb.y)*1.0);
    double c=sqrt(dis(pa.x-pc.x,pa.y-pc.y)*1.0);
    double p=(a+b+c)/2;
    double s=sqrt(p*(p-a)*(p-b)*(p-c));
    double tmp=a*pc.r/2;
    if(tmp>=s) return 0;
    return 1;
}

void init()
{
    int i,j,k;
    FOR1(i,n) FOR1(j,m)
    {
        if(dis(a[i].x-b[j].x,a[i].y-b[j].y)>a[i].r*a[i].r) continue;
        FOR1(k,K) if(!check(a[i],b[j],c[k])) break;
        if(k>K) V[i].pb(j);
    }
}
int OK(int mid)
{
    clr(head,-1); e=0;
    int s=0,t=n+m+1,i,j,k;
    FOR1(i,n) Add(s,i,mid/a[i].t+1);
    FOR1(i,m) Add(n+i,t,1);
    FOR1(i,n) FOR0(j,SZ(V[i]))
    {
        k=V[i][j];
        Add(i,n+k,1);
    }
    return Maxflow(s,t,t+1)==m;
}

int main()
{
    RD(n,m,K);
    int i,j;
    FOR1(i,n) a[i].get();
    FOR1(i,m) b[i].get();
    FOR1(i,K) c[i].get();
    init();
    int low=0,high=INF,mid,ans=-1;
    while(low<=high)
    {
        mid=(low+high)>>1;
        if(OK(mid)) ans=mid,high=mid-1;
        else low=mid+1;
    }
    PR(ans);
}

BZOJ 1822 Frozen Nova 冷冻波(最大流)的更多相关文章

  1. 1822: [JSOI2010]Frozen Nova 冷冻波 二分最大流

    1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 585  Solved: 175[Subm ...

  2. BZOJ-1822 Frozen Nova 冷冻波 计(jie)算(xi)几何+二分+最大流判定+经典建图

    这道逼题!感受到了数学对我的深深恶意(#‵′).... 1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec Memory Limit: 64 MB S ...

  3. BZOJ1822 Frozen Nova 冷冻波

    1822: [JSOI2010]Frozen Nova 冷冻波 Time Limit: 10 Sec  Memory Limit: 64 MB Description WJJ喜欢“魔兽争霸”这个游戏. ...

  4. 【BZOJ1822】[JSOI2010]Frozen Nova 冷冻波 几何+二分+网络流

    [BZOJ1822][JSOI2010]Frozen Nova 冷冻波 Description WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀 ...

  5. 【bzoj1822】[JSOI2010]Frozen Nova 冷冻波 计算几何+二分+网络流最大流

    题目描述 WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵.我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线 ...

  6. Bzoj1822 [JSOI2010]Frozen Nova 冷冻波

    Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1933  Solved: 608 Description WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖 ...

  7. BZOJ 1822[JSOI2010]Frozen Nova 冷冻波

    网络流+二分. n^3枚举判断每个巫妖可以攻击的精灵,向其连1的边,每个精灵向汇点连1的边. 二分答案,修改源点流向每个巫妖的cap,跑最大流看是否等于精灵数. 恩,看起来没什么毛病. 然后狂WA不止 ...

  8. BZOJ1822 [JSOI2010]Frozen Nova 冷冻波 二分+最大流

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1822 题解 好久没做网络流的,都没有想到网络流... 首先暴力判断一下一个巫妖和一个精灵之间能 ...

  9. 【计算几何】【二分答案】【最大流】bzoj1822 [JSOI2010]Frozen Nova 冷冻波

    用三角形面积什么的算算点到直线的距离之类……其实相切的情况是可行的……剩下的就跟某SDOI2015一样了. #include<cstdio> #include<cmath> # ...

随机推荐

  1. Javascript中的json操作

    <!doctype html> <html> <head> <title>extjs-json</title> <script typ ...

  2. sql语句删除数据表重复字段的方法

    大家都可能遇到字段重复的情况,网上很多人在找方法,也给出了一些方法,但是有的方法是误导大家,铁牛写出以下方法,方便大家使用 1.通过group by把重复的字段筛选出来,并建立临时表tmp 1 cre ...

  3. libevent使用<一> libevent导入项目

    最近做mysql代理层读写分离,发现在C,C++领域libevent很厉害的样子. 1. 安装libevent linux下源码安装或者直接yum安装. libevent只是一套对一些底层技术的封装, ...

  4. Elasticsearch多索引

     在Elasticsearch中,一般的查询都支持多索引.只有文档API或者别名API等不支持多索引操作,因此本篇就翻译一下多索引相关的内容. 首先,先插入几条数据: $ curl -XPOST lo ...

  5. alias function varibales in Linux/GNU and Mac alias命令细说

    细说,在古文言中是”奸细佞臣的话“,现如今成了”详细说明“的缩略. alias是MS-DOC中cmds中doskey的counterpart,是”别名“或者”化名“的意思 alias强大之处在于可以化 ...

  6. 模数转换器(ADC)的基本原理【转】

    模数转换器(ADC)的基本原理 模拟信号转换为数字信号,一般分为四个步骤进行,即取样.保持.量化和编码.前两个步骤在取样-保持电路中完成,后两步骤则在ADC中完成. 常用的ADC有积分型.逐次逼近型. ...

  7. JS和CSS的多浏览器兼容(3)

    3.Javascript的浏览器兼容性问题 3.1 集合类对象问题说明:IE下,可以使用()或[]获取集合类对象; Safari及Chrome下,只能使用[]获取集合类对象. 解决方法:统一使用[]获 ...

  8. android TextView加载html内容并加载图片

    package com.example.textviewfromhtml; import java.net.URL; import android.app.Activity; import andro ...

  9. 修改ecshop让订单详情里将会员地址详情全部显示

    $sql = "SELECT concat(IFNULL(c.region_name, ''), '  ', IFNULL(p.region_name, ''), " . &quo ...

  10. 20145227 《Java程序设计》第9周学习总结

    20145227 <Java程序设计>第9周学习总结 教材学习内容总结 1.JDBC简介 JDBC全名Java DataBase Connectivity,是java联机数据库的标准规范. ...