当前位置: 首页 > news >正文

codeforces 814D (DFS)

题目链接:http://codeforces.com/contest/814/problem/D

题意:n个人跳舞,跳舞范围为半径为R的圆,任意两个圆只有至多一个交点。现在把这n个人分成前半夜和后半夜跳舞,被覆盖奇数次的数值-S,偶数次的+S,求数值最大值

思路:因为任意两个圆至多只有1个交点,所以可以建立成若干棵树(森林),每棵树半径最大的为根,每个节点的父节点为能覆盖它的最小圆,如样例1为

                          1

                         /  \

                          2         3

                           /   \

                           4       5

每棵树都要被拆成两部分,设深度为i的面积为S(i),由于包含关系知S(1)>S(2)>S(3)>......,S(1)必为正,ans = S(1) + S(2) - S(3) + S(4) - S(5) + ......

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e3 + 5;
const double eps = 1e-10;
const double pi = acos(-1);
bool vis[N];
int n;
double ans = 0;
int sgn(double x,double y)
{
    if(fabs(x - y) < eps)
        return 0;
    return x > y ? 1 : -1;
}
struct Circle
{
    double x,y,r;
    bool operator < (Circle t)
    {
        return r > t.r;
    }
}circle[N];
bool covered(Circle a,Circle b)
{
    if(sgn(a.r + b.r, sqrt((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y))) <= 0)
        return 0;
    return 1;
}
void dfs(int i,int depth)
{
    if(vis[i])
        return;
    vis[i] = 1;
    if(depth == 1 || depth % 2 == 0)
        ans += circle[i].r * circle[i].r * pi;
    else
        ans -= circle[i].r * circle[i].r * pi;
    for(int j = i + 1; j <= n; j++)
    {
        if(covered(circle[i],circle[j]))
            dfs(j,depth + 1);
    }
}
int main()
{
    scanf("%d",&n);
    for(int i = 1; i <= n; i++)
        scanf("%lf %lf %lf",&circle[i].x,&circle[i].y,&circle[i].r);
    sort(circle + 1, circle + n + 1);
    for(int i = 1; i <= n; i++)
        dfs(i,1);
    printf("%.8lf\n",ans);
    return 0;
}

  

转载于:https://www.cnblogs.com/westwind1005/p/7019289.html

相关文章:

  • [转]eclipse 配置黑色主题 Luna 方式三
  • bootstrap validate remote 自定义message返回
  • e课表项目第二次冲刺周期第十天
  • http 又想起了苑
  • 使用JPA和Hibernate进行批量处理的最佳方式
  • Linux系统下GDB调试
  • 【安卓9】SimpleCursorAdapter、在列表中展示数据
  • 查看windows进程,并删除
  • 阿里云上部署开源PaaS平台Cloud Foundry实战
  • 页码生成算法
  • C++内联函数
  • 收缩数据文件
  • Flask 扩展 表单
  • openfalcon-0.2 配置
  • elasticsearch从入门到出门-08-Elasticsearch容错机制:master选举,replica容错,数据恢复...
  • 2017届校招提前批面试回顾
  • GraphQL学习过程应该是这样的
  • hadoop集群管理系统搭建规划说明
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Node项目之评分系统(二)- 数据库设计
  • PAT A1017 优先队列
  • Spring声明式事务管理之一:五大属性分析
  • SQLServer之创建数据库快照
  • 程序员该如何有效的找工作?
  • 从重复到重用
  • 缓存与缓冲
  • 基于组件的设计工作流与界面抽象
  • 目录与文件属性:编写ls
  • 使用putty远程连接linux
  • 我是如何设计 Upload 上传组件的
  • 小试R空间处理新库sf
  • 新手搭建网站的主要流程
  • Java总结 - String - 这篇请使劲喷我
  • Prometheus VS InfluxDB
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​插件化DPI在商用WIFI中的价值
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #if #elif #endif
  • (Ruby)Ubuntu12.04安装Rails环境
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (十八)SpringBoot之发送QQ邮件
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)大型网站架构演变和知识体系
  • .FileZilla的使用和主动模式被动模式介绍
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core 依赖注入的基本用发
  • .NET Standard 的管理策略
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .Net中ListT 泛型转成DataTable、DataSet