首页 > 其他分享 >潍坊一中 2023 秋提高级友好学校赛前联测 1 T3

潍坊一中 2023 秋提高级友好学校赛前联测 1 T3

时间:2023-10-13 20:33:33浏览次数:33  
标签:10 直线 圆盘 样例 T3 19 联测 2023 盘子

Mystia 的居酒屋

题目背景

小麻雀 Mystia 开了一间居酒屋,每天清晨她都要跨过门前的河流去收集食材。

题目描述

Mystia 想搭一座跨过河的桥,来方便她取得食材。

河是一条无限长的宽度为 \(W\) 的直线,所有在坐标系中符合 \(0≤y≤W\) 的点都属于这条河流。

河面上有 \(N\) 个木桩,附近的杂货店可以买到 \(M\) 种可以使用的木头圆盘,第 \(k\) 个木桩的坐标为 \((X_k,Y_k)\)。第 \(k\) 种圆盘半径为 \(R_k\),每一块的价格为 \(C_k\)。

她可以买任意种任意多的圆盘,把它们放到河面上。每一个圆盘的中心都必须为某一个木桩的位置。而且,某些圆盘的一部分可以在地面上,即 \(y<0\) 或 \(y>W\)。

Mystia 只能在河两岸或圆盘上移动,两岸即直线 \(y=0\) 或直线 \(y=W\),也可以从一个位置移动到另一个与其相切或相交的圆盘。

请问她修建一座可以从直线 \(y=0\) 到直线 \(y=W\) 走过去的圆盘桥的最小花费是多少?

输入格式

第一行一个整数 \(T\) ,代表测试数据的组数。

对于每组数据:
第一行有三个空格隔开的正整数 \(N,M,W\)。
接下来 \(N\) 行,每行两个空格隔开的自然数 \(X_k,Y_k\)。
接下来 \(M\) 行,每行两个空格隔开的正整数 \(R_k,C_k\)。

输出格式

对于每组数据,输出从直线 \(y=0\) 到直线 \(y=W\) 修建一座可以走过去的桥最少的花费。如果这是不可能完成的,那么输出 impossib1e

样例 #1

样例输入 #1

4
1 1 10
1 5
5 5
11 4 13
19 10
8 7
11 4
26 1
4 2
15 4
19 4
1 9
4 6
19 5
15 10
2 1
3 100
4 10000
5 1000000
11 4 13
19 10
8 7
11 4
26 1
4 2
15 4
19 4
1 9
4 6
19 5
15 10
2 1
3 2
4 3
5 4
1 1 1000000
0 500000
1 1

样例输出 #1

5
206
5
impossib1e

提示

样例解释

对于样例中的第一组数据,如图放置圆盘,刚好可以从河边到达对岸。

对于样例中的第二、三组数据,如图所示,可以修建一座桥。两组数据仅花费不同。

对于样例中的第四组数据,显然无法修建符合题意的桥。

数据范围

每个测试点的具体限制见下表:

测试点编号 \(T≤\) \(N≤\) \(M≤\) \(W,X_k≤\) \(R_k≤\) \(C_k≤\) 特殊性质
\(1\sim2\) \(1\) \(1\) \(1\) \(10^3\) \(10^3\) \(10^3\)
\(3\sim5\) \(10\) \(7\) \(7\) \(10^4\) \(10^4\) \(10^4\)
\(6\sim8\) \(10\) \(40\) \(40\) \(10^4\) \(10^4\) \(10^4\)
\(9\sim12\) \(10\) \(40\) \(40\) \(10^4\) \(10^4\) \(10^4\)
\(13\sim20\) \(10\) \(100\) \(100\) \(10^6\) \(10^6\) \(10^6\)
\(21\sim25\) \(10\) \(100\) \(20100\) \(10^6\) \(200\) \(200\)

特殊性质:对于每组测试数据,所有的 \(X_k\) 均相同。

所有数据保证全部木桩均在河流中,即 \(0≤Y_k≤W\)。

先说一下比较朴素的做法,前 20 个点显然分层图跑最短路,发现 21 ~ 25 \(R_k,C_k \leq 200\) ,我们可以把又小又贵的盘子去掉,然后盘子数量就 \(\leq 200\) 直接跑即可,这么做点数 \(O(nm)\) ,边数 \(O(n^2m^2)\) ,但我隐式建图赛时竟然过掉了,其实这么做复杂度是不太对的

考虑优化一下,我们发现复杂度瓶颈在于边数过大,考虑优化建图。我们可以先连一条默认可以使用到的最小盘子,然后如果想换盘子可以在分层图上下两层同一节点上连一条长为 \(c_x - c_y\) 的边来做到换盘子,边数就变成了 \(O(n^2m)\) 的了,直接跑 dijkstra 就可以过

但这个题有 \(O(n^2m)\) 做法。考虑不拆点设 \(f_{i,j}\) 为 \(i\) 上盘子种类为 \(j\) 情况下 \(1 \rightarrow i\) 的距离,那么考虑模拟dijkstra 的过程。记 \(g_i = \min_j f_{i,j}\) ,原问题改为每次选 \(g_i\) 最小的点用它的所有 \(f_{i,j}\) 更新其他所有的 \(f_{k,l}\) ,更新的时候直接双指针可以做到 \(O(m)\) ,做法即枚举转移到 \(v\) 点时使用的盘子 \(r\) ,则 \(u\) 点使用能使用的最小的盘子 \(l\) 。但是这个最短路看起来是不对的,考虑证明,如果松弛顺序有问题只可能因为两个桩子 \(i,j\) ,当前 \(g_i < g_j\) ,且 \(i,j\) 都在最短路上,且 \(i\) 比 \(j\) 靠后;但此时绕道走 \(j\) 唯一目的只能让 \(i\) 换一个更大的盘子,那么如果其盘子由 \(x\) 换到 \(y\) ,直接更改 \(i\) 的盘子只有 \(f_{i,x} - c_x + c_y\) 。而过去至少要更新到 \(g_j + c_x\) 。于是此时一定不会让 \(j\) 去松弛 \(i\) ,更新顺序就是对的了

听起来好像还是有点难以理解,放一下别人的代码:

    int ord[N];
    for(int _=1;_<=n;_++){
        int u=1;
        for(int i=1;i<=n;i++){
            if(vis[u]||!vis[i]&&f[i][0]<f[u][0])u=i;
        }
        ord[u]=_;
        vis[u]=true;
        for(int i=1;i<=n;i++){
            ll d=pow2(ps[i].y-ps[u].y)+pow2(ps[i].x-ps[u].x);
            int l=m,v=f[u][m],mv=inf;
            for(int j=1;j<=m;j++){
                while(l>=2&&pow2(cs[j].r+cs[l-1].r)>=d)l--,v=min(v,f[u][l]);
                if(pow2(cs[j].r+cs[l].r)<d)continue;
                f[i][j]=min(f[i][j],cs[j].c+v);
                f[i][j]=min(f[i][j],mv+cs[j].c);
                f[i][0]=min(f[i][0],f[i][j]);
                mv=min(mv,f[i][j]-cs[j].c); // 这里是为了计算使用更大的盘子的情况
            }
        }
    }

标签:10,直线,圆盘,样例,T3,19,联测,2023,盘子
From: https://www.cnblogs.com/fox-konata/p/17763076.html

相关文章

  • P9233 [蓝桥杯 2023 省 A] 颜色平衡树 (dfs序 莫队)
    P9233[蓝桥杯2023省A]颜色平衡树(dfs序莫队)莫队原理:https://zhuanlan.zhihu.com/p/115243708对于树上的每个结点,按照dfs序打上时间戳,这样就可以把每一个结点对应的子树的答案转化为一个区间的答案。将子树询问离线下来变成\(n\)个区间查询。用\(cnt\)数组维护颜色......
  • 20231009-20231015
    20231009考试。20231010[AGC057E]RowCol/ColRowSort给定一个\(n\timesm\),值域\([0,9]\)的矩阵\(B\),请你计数有多少个大小相同的矩阵\(A\)满足下列条件:分别对\(A\)的每一列中元素从小到大排序,再分别对\(A\)的每一行中元素从小到大排序能够得到\(B\)。分别......
  • 20231013
    20231013NOIP#19(33daiOJ)总结时间安排7:25~8:00看题,\(A\)一点不会,\(B\)会\(15\)分,\(C,D\)各会一档。7:50~8:00写\(D\)的第一档。8:00~8:10写\(B\)的前两档。8:10~8:40写\(C\)的第一档。8:40~9:00想到写了\(B\)的\(n^2\)。9:00~10:25会了\(A\)题,但是......
  • 优艾智合机器人登榜2023深圳行业领袖企业100强
    近日,由深圳市行业领袖企业发展促进会与深圳商报共同主办的“2023深圳行业领袖企业100强”与“深圳未来行业领袖企业50强”评选结果出炉。凭借在工业移动机器人领域的突出表现,优艾智合荣登2023深圳行业领袖企业100强榜单!图:深圳商报榜单公示作为国内领先的移动机器人及解决方案提......
  • 2023深圳高交会IT展,创新科技,引领智能生活
    当下快节奏的都市生活让更多年轻人选择在忙碌的间隙探索更多具有科技感、未来感的智能终端产品,通过使用各种智能家居产品、智能运动穿戴设备、VR眼镜、宠物机器人、智能学习设备等帮助自己智慧生活、愉悦心情。各类智能产品、设备正成为科技与人文的衔接点,成为现代人改善生活的小妙......
  • 2023.10.13 JavaScript DOM
    文档对象模型获取对象1.根据id属性值获取,返回单个对象varh1=document.getElementById('h1');2.根据标签名获取,返回对象数组vardivs=document.getElementByTagName('div');3.根据name属性值获取,返回对象数组varhobbys=document.getElementByName('hobby');4.根......
  • 2023-2024-1 20231413 《计算机基础与程序设计》第三周学习总结
    班级:2023-2024-1-计算机基础与程序设计作业要求:2023-2024-1《计算机基础与程序设计》教学进程目标:自学教材:计算机科学概论第2、3章并完成云班课测试《C语言程序设计》第2章并完成云班课测试教材学习内容总结:了解了进制转换、图像/音频压缩,计算机数学的基础知识教材学习中的......
  • 2023-2024-1 20231301 《计算机基础与程序设计》第三周学习总结
    2023-2024-120231301《计算机基础与程序设计》第三周学习总结作业信息作业链接作业课程<班级>(2023-2024-1-计算机基础与程序设计)作业要求<作业>(2023-2024-1计算机基础与程序设计第三周学习总结)作业目标<《计算机基础与程序设计》预习第二、三章>《计算机......
  • P9120 [春季测试 2023] 密码锁
    第一个想法显然是二分答案,可以考虑二分\(C\)值后枚举每一个权值区间进行判定,时间复杂度为\(O(nk^2\min(a,nk)\loga)\)。这个已经有\(5\times(5+4+5)=70\)分了??写一下。好吧假假假,每个权值区间毙掉的每个位置的密码锁状态都不同,并不好直接处理。很好现在\(25\)分。可以设d......
  • 2023版本Phpstorm的运行和初始文件配置
    1.PHPForWindows:BinariesandsourcesReleases官网下载配置包php-8.0.30-nts-Win32-vs16-x64.zip  2.解压 3.复制php.ini-production,将副本更名为php.ini作为初始文件 4.编辑php.ini文件 a.取消extension_dir的;注释 b.找到配置包中的ext文件路径,赋值给exten......