HDU 3656 DLX重复覆盖

使用Qt Creator调用eBUS SDK 在新界面,勾选左下角“ Show unreachable Network Devices",可以看到没有成功连接的网络相机,原因是IP地址配置错误。每个版本的OpenCV的依赖项的名字都不同,我这里是opencv_world490.lib与opencv_world490d.lib。函数,可以看到在这里是图像缓存区,能够对捕获的图像进行一些操作。在Visual Studio打开项目属性,在VC++目录这里,把Opencv的路径添加进去。这时,会自动跳转到mainwindow.cpp,生成该按钮对应的槽函数。 阅读详情
/*********************************************************************************
    纠结了良久,这个题是DLX的重复覆盖问题,以前还没见过,最后套了晓天大牛的模板,水过了。
还是模板题。。。因为最后的答案必然是某两点的距离,所以离散化一下所有距离后二分再套用DLX
重复覆盖模板就能AC了~赞一下神函数unique_copy,这个模板的细节还是要很小心才行,
计数都要从1开始~
*********************************************************************************/
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <utility>
#include <cstdio>
#include <vector>
#include <cmath>
#include <ctime>
#include <map>
#include <set>
using namespace std;

typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;

const int INF_INT = 0x3f3f3f3f;
const double oo = 10e9;
const double eps = 10e-7;

const int MAXN = 104;
const int MAXM = MAXN * MAXN;

PII house[MAXN];
int test, n, m;
int dtop, dis[MAXM], laby[MAXN][MAXN];
int nodecnt;
int U[MAXM], L[MAXM], D[MAXM], R[MAXM], row[MAXM], col[MAXM];
int sz[MAXN];
bool vis[MAXN], maze[MAXN][MAXN];

int sqa_dist(const PII &pa, const PII &pb)
{
    return (pa.first - pb.first) * (pa.first - pb.first) + 
            (pa.second - pb.second) * (pa.second - pb.second);
}
void initDLX(int mm)
{
    memset(sz, 0, sizeof(sz));
    memset(col, -1, sizeof(col));
    nodecnt = mm + 1;
    for (int i = 0; i <= mm; ++i)
    {
        L[i] = i - 1;
        R[i] = i + 1;
        U[i] = D[i] = i;
        col[i] = i;
    }
    L[0] = mm;
    R[mm] = 0;
    sz[0] = INF_INT;
    return ;
}
void insert(int id, int *tt, int c)
{
    for (int i = 0; i < c; ++i, ++nodecnt)
    {
        int x = tt[i];
        row[nodecnt] = id;
        col[nodecnt] = x;
        ++sz[x];
        U[nodecnt] = x;
        D[nodecnt] = D[x];
        U[ D[x] ] = nodecnt;
        D[x] = nodecnt;
        if (0 == i)
        {
            L[nodecnt] = R[nodecnt] = nodecnt;
        }
        else
        {
            L[nodecnt] = nodecnt - 1;
            R[nodecnt] = nodecnt - i;
            R[nodecnt - 1] = nodecnt;
            L[nodecnt - i] = nodecnt;
        }
    }
    return ;
}
void buildDLX(int key)
{
    int tt[MAXN], c;
    memset(maze, false, sizeof(maze));
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= n; ++j)
        {
            maze[i][j] = (laby[i][j] <= key);
        }
    }
    for (int i = 1; i <= n; ++i)
    {
        c = 0;
        for (int j = 1; j <= n; ++j)
        {
            if (maze[i][j])
            {
                tt[c++] = j;
            }
        }
        insert(i, tt, c);
    }
    return ;
}
void remove(int x)
{
    for (int i = D[x]; i != x; i = D[i])
    {
        L[ R[i] ] = L[i];
        R[ L[i] ] = R[i];
        --sz[ col[i] ];
    }
    return ;
}
void resume(int x)
{
    for (int i = U[x]; i != x; i = U[i])
    {
        L[ R[i] ] = i;
        R[ L[i] ] = i;
        ++sz[ col[i] ];
    }
    return ;
}
int h()
{
    memset(vis, false, sizeof(vis));
    int res = 0;
    for (int i = R[0]; i != 0; i = R[i])
    {
        if (vis[ col[i] ])
        {
            continue ;
        }
        vis[ col[i] ] = true;
        ++res;
        for (int j = D[i]; j != i; j = D[j])
        {
            if (col[j] != 0)
            {
                for (int k = R[j]; k != j; k = R[k])
                {
                    vis[ col[k] ] = true;
                }
            }
        }
    }
    return res;
}
bool dfs(int step, int key)
{
    if (h() + step > m)
    {
        return false;
    }
    if (0 == R[0])
    {
        return true;
    }
    int id = 0;
    for (int i = R[0]; i != 0; i = R[i])
    {
        if (sz[i] < sz[id])
        {
            id = i;
        }
    }
    for (int i = D[id]; i != id; i = D[i])
    {
        remove(i);
        for (int j = R[i]; j != i; j = R[j])
        {
            remove(j);
        }
        if (dfs(step + 1, key))
        {
            return true;
        }
        for (int j = L[i]; j != i; j = L[j])
        {
            resume(j);
        }
        resume(i);
    }
    return false;
}
double bisearch()
{
    int low = 0, high = dtop - 1, mid = (low + high) >> 1;
    int res = mid, key;
    while (low <= high)
    {
        mid = (low + high) >> 1;
        key = dis[mid];
        initDLX(n);
        buildDLX(key);
        if (dfs(0, key))
        {
            res = mid;
            high = mid - 1;
        }
        else
        {
            low = mid + 1;
        }
    }
    return sqrt(dis[res] + 0.0);
}
void ace()
{
    double ans;
    for (scanf("%d", &test); test--; )
    {
        scanf("%d %d", &n, &m);
        for (int i = 1; i <= n; ++i)
        {
            scanf("%d %d", &house[i].first, &house[i].second);
        }
        dtop = 0;
        for (int i = 1; i <= n; ++i)
        {
            for (int j = 1; j <= n; ++j)
            {
                laby[i][j] = dis[dtop++] = sqa_dist(house[i], house[j]);
            }
        }
        sort(dis, dis + dtop);
        dtop = unique_copy(dis, dis + dtop, dis) - dis;
        ans = bisearch();
        printf("%.6lf\n", ans);
    }
    return ;
}
int main()
{
    ace();
    return 0;
}

hwasan实例分析踩内存之七:CamX进程chifeature2base怪异的Cause: use-after-free 摘要:本文分析了高通camx进程中的指针异常crash问题,通过构建hwasan版本确认存在内存踩踏现象。日志显示为"use-after-free"类型错误,具体为线程T175672在已释放内存区域执行写入操作。堆栈分析表明ChiFeature2Base::PipelineDestroyCb()函数访问了已被ChiFeature2Base::DestroyFeatureData()释放的pPipelineData对象。该问题源于多线程环境下内存管理不同步,导致释放后仍被引用。解决方案通过 阅读详情

相关推荐

医学成像学习笔记(一):核磁共振成像(MRI)k空间为何是图像频谱详解

前言   k空间是核磁共振成像图像重建的核心,可能很多人像笔者一样第一次学时会非常疑惑,为何k空间是图像的频域空间,观其填充过程,明明是空域信号的采样填充呀。网上很少有文章讨论这个问题,所以笔者在此写下自己的理解,供大家参考。 MRI位置编码   现在的MRI一次扫描的是一个断层或者多个断层,所谓断层就是一个有厚度的面,通过z方向梯度场来选择。我们扫描一个断层的目的是为了获得该断层各位置的质子情况,它们携带着组织的性质信息,反应出来的就是信号强度。如果整个断层都采用相同的磁场强度,而我们只能得到一个断

意疏的学习笔记 1万+

[DLX重复覆盖] hdu 3656 Fire station

题意: N个点,再点上建M个消防站。 问消防站到每个点的最大距离的最小是多少。 思路: DLX直接二分判断TLE了。 这时候一个很巧妙的思路 我们求的距离一定是两个点之间的距离 因此我们把距离都求一遍排序一下。 然后用下标二分  这样就AC了。 代码: #include"stdio.h" #include"algorithm" #include"string.h" #inclu

Enmity_Dark 689

INMP441麦克风与ESP32的I2S音频采集实战指南

本文提供了INMP441数字麦克风与ESP32开发板通过I2S接口进行高质量音频采集的完整实战指南。详细讲解了硬件连接、软件配置、数据读取及基础处理,并分享了常见的避坑技巧与性能优化建议,帮助开发者快速构建物联网音频应用。

weixin_28396629的博客 599

hdu3656Fire station(DLX重复覆盖 + 二分)

题目请戳这里 题目大意:一个城市n个点,现在要建m个消防站,消防站建在给定的n个点中。求建m个消防站后,m个消防站要覆盖所有的n个点的覆盖半径最小。 题目分析:重复覆盖问题,DLX解决。不过要求覆盖半径最小,需要二分。虽然给的范围并不大,DLX毕竟还是暴力搜索,而且精度有6位小数,因此直接二分距离的话会TLE!解决方案是将图中任意2点的距离记录下来,去重后二分已知的距离。因为消防站建在给定的n

ophunter的专栏 1201

VSCode 降低适用版本并且关闭自动更新

官方表示,提高了远程服务器构建工具链的最低要求,更新了对 glibc 的要求,需要最低2.28版本。最快的方法是把vs code的版本降到1.85(为什么是这个版本呢?打开VS Code的官方网站(https://code.visualstudio.com/)通过查看可以知道,具体的版本没有直接显示分类,他是根据发布日期来分类的同时和版本匹配。在网站的顶部导航栏中找到”Updates”按钮,点击进入下载页面。找了半天一直没发现,原来就在紧挨着的下面。远程主机不满足运行vs code服务器的先决条件。

Sunflower的博客 9583

MacOS上如何修改jupyter book的默认打开地址以及如何复制文件路径

记点笔记,才换新系统小半年,还是不太熟悉,所以记录一下笔记,感觉之后也会用到,希望能帮到你们。主要内容是:修改jupyter的默认地址以及复制文件路径。

魔仙的博客 1978

HDU 3656 Fire station(巧妙的二分+DLX重复覆盖)

题目地址 题意:给你n个城市,在这个n个城市中要修m个消防局,问在这个限制条件下使得每一个城市发生火灾所需要的最大救援长度最短,最短为多少。 思路:和HDU 2295 Radar一样,但是我们这里就不能直接二分枚举距离了,我看别人博客学到了一个巧妙的二分方法,因为要求最短,那么最短肯定是恰好是某个城市到消防局的距离,所有我们把城市与城市之间的距离离散出来,这样的话我们二分搜索下标,这样的话二分的

不要錯過才珍惜 904

CANoe基础讲解01:从零开始使用CANoe轻松搭建你的第一个CAN网络

本文是一篇CANoe软件入门实操指南,逐步演示了如何从零创建并运行一个CAN FD仿真工程。内容包括:启动软件、配置硬件通道与网络、加载DBC数据库、使用CAPL编写仿真节点发送CAN报文,最终启动测量并在Trace窗口中查看通信结果。通过七个清晰步骤,帮助初学者快速掌握CANoe基本操作,完成首个可运行的仿真网络搭建

车载网络小D的博客 1573

hdu 3656 Fire station 重复覆盖 DLX+二分答案 给出一些城市及一些救火站的坐标,要求这些救火站覆盖所有的城市,问从救火站到城市的最长时间至少是多少。

Problem Description A city's map can be seen as a two dimensional plane. There are N houses in the city and these houses can be seen as N

kongming_acm的专栏 803

YonBIP 3.0 报表开发+报表超链接

用友报表开发

m0_55096250的博客 1765

Qt入门教程【环境搭建篇】Qt6+Mingw+QMake+QtCreator

Qt Windows平台安装

小鱼酱的博客 2万+

HDU 3656 Fire station

Problem Description A city's map can be seen as a two dimensional plane. There are N houses in the city and these houses can be seen as N points P1 …… PN on the two dimensional plane. For simplicit

Occult 605

【YOLOv8改进-损失函数】 YOLOv8自带损失函数CIoU / DIoU / GIoU 详解,以及如何切换损失函数

在介绍YOLOv8中的各种Iou之前,我们先来了解了解目标检测中的损失函数。目标检测模型通常包含两类损失函数:类别损失(分类)和位置损失(回归)。这两类损失函数用于检测模型的最后一部分,根据模型的输出(类别和位置)以及实际标注框(类别和位置),分别计算类别损失和位置损失。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 5190

DLX(II)

From http://longxiaozhi.is-programmer.com/posts/24817.html       Fire station   Radar LBOY: 两个题目是同一个类型,用到的解题思想都是:二分答案 + DLX 判定!以第二个题目为例来说一下。 题目中限制条件,每个消防站可以供应几户人家,如果把消防站看成是行,将用户看成是列,那么问题就是一个“重

tjf的专栏 626

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

HDU 5046 Airport DLX

【题目大意】 有n个

ACMmaxx的专栏 902

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

DLX题集

FZU 1686 神龙的难题 HDU1426  Sudoku Killer HDU1530 Maximum Clique  HDU1603 A Puzzling Problem HDU2119 Matrix HDU2295 Radar HDU2518 Dominoes

天亮说晚安 2273

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

HDU 4013 图论 树的最小表示

/******************************************************************************* 去年上海赛区热身赛的一道题,树的最小表示模板题。解法就是用二进制枚举所有可能的联通子图,然后 求所有联通子图的最小表示,要注意的是对于某一个联通子图,最小表示需要枚举联通子图里的所有的点,然 后从这些点开始进行dfs,dfs过程中进

源码力量 2521

HDU 4121 模拟

/**************************************************************************************************** 坑爹的模拟题~注意这两种情况:黑方的将能直接飞过去杀了红方的将,还有将走一步能把红方别的子给吃了。。。 ******************************************

源码力量 1773

HDU 3644 计算几何 模拟退火

/* * ===================================================================================== * * Filename: hdu3644.cpp * * Description: Calculate Geometry -- Simulated annealing * *

源码力量 1742

HDU 4049 状态压缩DP

/******************************************************************************* 去年北京赛区网络赛水题,状态压缩DP,一开始TLE,然后发现是没初始化,应该用空间换时间来着, 接着WA,搞了半天没搞明白。。。最后发现发现一个小小的纰漏~~~ 解法就是建立状态dp[M][1 << N],用第一个状态表示

源码力量 1675

HDU 1512 左式堆 + 并查集

/* * ===================================================================================== * * Filename: hdu1512.cpp * * Description: Leftist Heap + Union Find Set * * Version

源码力量 1616

HDU 4036 物理坑爹题

/******************************************************************************* 坑爹的地方比较多,首先所有质量都是没用的,因为无摩擦力;其次坐标最好都用double表示;还有那个 土豆是的坐标是相对于第一个peak的坐标,第四貌似有土豆可以不在peak的范围内。。。以后找min/max值 还是用第一个元素做标记

源码力量 1590

HDU 4123 树状DP+RMQ

/****************************************************************************************************************** 尼玛。。。神题。。。居然能卡RMQ的log2的。。。解法就是先用树状DP预处理整棵树,得到每个节点距离其他节点的最大值, 这个时间复杂度是O(n),然后在得到的

源码力量 1542

HDU 4031 树状数组 区间更新及点询问

/******************************************************************************* 去年成都赛区网络赛一道题,树状数组在区间更新中的应用。树状数组一般支持的是改点,查区间,但 是这道题要求的是改区间,查点,这就要变通一下,具体可以看代码,另外要考虑的一个问题是,如何统计? 这里的处理方法就是把总共的攻击次数-防御

源码力量 1506

HDU 4046 树状数组

/******************************************************************************* WA了N多次。。。结果是忘记初始化st数组了。。。悲剧得1B。。。 解法就是考虑修改位置id的字符,观察左右"wbw"是否被更改,如果被更改了,那么就更新下,这个地方要 特别小心。。。具体可以见代码~ ************

源码力量 1410

HDU 3657 网络流

/*************************************************************************************** 去年网络赛的一道题,现在看来也不是很难。做个HDU上那道方格取数的话,这道题大致就有想法了, 但这道题有个问题是,必选点的处理,我的做法是如果该点为偶数点,则在源点与该点间建一条流量为oo 的边,如果该点为奇数点,

源码力量 1255
上一篇: HDU 3657 网络流
下一篇: 我的C++开头~
codeforces_sphinx
博客等级 码龄15年 32粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值