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

Solution - P11597 [NOISG 2018 Finals] City Mapping

想不通怎么在交互题里重剖,于是使用随机化。

我们随便定一个根,然后随便选一个节点。我们可以用两次对当前所有点询问距离的方式求到两点之间的链。这样我们就求出了一些边。

我们借用淀粉质点分治的思想,将链上的所有点作为根,这样我们就把树切割成了若干个子树。这时我们可以直接算出链上点到子树的距离。复杂度期望 \(\mathrm O(n \log n)\)

在 luogu 三发过了,在 qoj 好像有点非,十几发最高才 96.8352 分。

long long get_distance(int X, int Y);
void find_roads(int N, int Q, int A[], int B[], int W[]);#include <bits/stdc++.h>
#define llong long long
#define N 1005
using namespace std;mt19937 rnd(random_device{}());
vector<int> que[1000006]; int s[1000006], he, ta;
llong dis[N][N];inline llong getdis(int u, int v){if(dis[u][v]) return dis[u][v];return dis[u][v] = dis[v][u] = get_distance(u, v);
}void find_roads(int n, int Q, int A[], int B[], int W[]){he = ta = 1; int cnt = 0;for(int i = 1; i <= n; ++i) que[1].push_back(i);for(int i = 2; i <= n; ++i)dis[1][i] = getdis(1, i);s[1] = 1;while(he <= ta){int now = he++;if(que[now].size() == 1) continue;int u = s[now];int v = que[now][rnd()%que[now].size()];while(v == u) v = que[now][rnd()%que[now].size()];vector<int> line;for(int k : que[now])if(k != v) dis[v][k] = getdis(v, k);assert(dis[u][v]==dis[v][u]);for(int k : que[now])if(dis[u][k]+dis[v][k] == dis[u][v]) line.push_back(k);sort(line.begin(), line.end(), [&](int a, int b){return dis[u][a]<dis[u][b];});for(int i = 1; i < line.size(); ++i)A[cnt] = line[i-1], B[cnt] = line[i], W[cnt] = dis[u][line[i]]-dis[u][line[i-1]], ++cnt;for(int k : que[now]){for(int i = 0; i < line.size(); ++i){if(dis[u][k]-dis[u][line[i]] == dis[v][k]-dis[v][line[i]]){que[ta+i+1].push_back(k);dis[line[i]][k] = dis[u][k]-dis[u][line[i]];break;}}}for(int i : line) s[++ta] = i;}return;
}
#undef N

其实这个方法还能凸,因为我们没有用度数不大于 \(3\) 的性质。

对于非链头链尾的节点,注意到其出度为 \(1\),于是我们可以少判一个节点。

http://www.jsqmd.com/news/425325/

相关文章:

  • nodejs+php+vue网上鞋店系统 球鞋商城 鞋材零售网店的设计与实现
  • Shell脚本踩坑记录
  • AT_arc210_e [ARC210E] Subset Sum Gaps
  • 选配
  • nodejs+php+vue课程线上考试系统设计与实现
  • 零基础部署 OpenClaw:从 0 到跑起来(新手可直接照做)
  • 华为 vs H3C交换机常用命令差异
  • 单目相机当深度传感器用,不用双目/结构光。通过阴影估测3D高度。
  • 高并发下如何保证接口的幂等性
  • CF958F2 Lightsabers (medium)题解
  • 【AI渗透】——专为渗透测试工程师和安全研究员设计的新一代集成化安全测试平台(Venom)
  • 一款基于 .NET 开源免费、高效且用户友好文件搜索工具!
  • 基于粒子群算法的含分布式电源的主动配电网电压—有功-无功优化研究:以IEEE33节点为例
  • .Android Compose 基础系列:您的第一个 Kotlin 程序
  • 借助MongoDB实现大数据的分布式存储
  • MiniRAG + LLM (二)
  • 一文梳理清大数据领域CAP定理,轻松驾驭数据
  • 电动汽车充放电调度优化:全局与局部方案的比较及性能分析
  • 鸿蒙应用开发UI基础第十四节:文本显示组件Text核心讲解与实战演示 - 鸿蒙
  • Java求职面试实战:微服务与安全框架场景问题解析
  • 玩转STM32F1驱动双雄:BLDC与PMSM的攻防战
  • 从 Java 到 Go:一场性能革命
  • 使用C语言实现STM的启动文件
  • 探索大数据领域Doris的核心特性与优势
  • AI推理能力革命:如何打造高性能原生应用?
  • Android 开发问题:FileProvider: java.lang.SecurityException: Provider must not be exported
  • 大数据时代:用户画像助力企业精准营销
  • 使用 pkgutil 实现动态插件系统
  • 自注意力机制详解:从原理到计算过程
  • 东莞直饮水机服务商怎么选?靠谱服务商推荐 - 小坤哥