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

st表 + 变形的djs (好题

st表 + 变形的djs (好题

https://codeforces.com/gym/105386/problem/J

#include <bits/stdc++.h>using i64 = long long;struct STList {int n, k;std::vector<std::vector<int>> Max;STList() {}STList(const std::vector<int>&a) {init(a);}void init(const std::vector<int>&a) {n = a.size();k = std::__lg(n) + 1;Max.assign(n, std::vector<int>(k));for (int i = 0; i < n; ++i) {Max[i][0] = a[i];}for (int j = 1; j < k; ++j) {for (int i = 0; i + (1 << j) <= n; ++i) Max[i][j] = std::max(Max[i][j - 1], Max[i + (1 << (j - 1))][j - 1]);}}int query(int l, int r) {int j = std::__lg(r - l + 1);return std::max(Max[l][j], Max[r - (1 << j) + 1][j]);}
};void Solve() {int n, m, K;std::cin >> n >> m >> K;std::vector<std::vector<std::array<int, 3>>> adj(n);for (int i = 0; i < m; ++i) {int x, y, c, l;std::cin >> x >> y >> c >> l;x--, y--, c--;adj[x].push_back({y, c, l});adj[y].push_back({x, c, l});}std::vector<std::vector<int>> pos(m), len(m);std::vector<int> L(K), col(K);for (int i = 0; i < K; ++i) {int c, l;std::cin >> c >> l;c--;pos[c].push_back(i);len[c].push_back(l);col[i] = c;L[i] = l;}std::vector<STList> f(m);for (int i = 0; i < m; ++i) {if (pos[i].size() == 0) {continue;}f[i].init(len[i]);}std::priority_queue<std::array<int, 3>, std::vector<std::array<int, 3>>, std::greater<>> q;q.push({0, 0, 0});std::vector<int> vis(n);while (!q.empty()) {auto [p, t, x] = q.top(); // ticket, remain distanceq.pop();if (vis[x]) {continue;}vis[x] = 1;// std::cerr << p << ' ' << t << ' ' << x << '\n';for (auto [y, c, l] : adj[x]) {// std::cerr << "y, c, l = " << y << ' ' << c << ' ' << l <<   '\n';if (pos[c].size() == 0) continue;if (c == col[p] && l <= L[p] - t) {q.push({p, t + l, y});continue;}auto it = std::upper_bound(pos[c].begin(), pos[c].end(), p) - pos[c].begin();if (it == pos[c].size()) {continue;}int v = it;int lo = it, hi = pos[c].size() - 1;if (f[c].query(lo, hi) < l) {continue;}// std::cerr << "binary search!\n";while (lo < hi) {int mid = (lo + hi) / 2;if (f[c].query(v, mid) >= l) {hi = mid;} else {lo = mid + 1;}}q.push({pos[c][lo], l, y});}}for (int i = 0; i < n; ++i) {std::cout << vis[i];}std::cout << '\n';
}int main() {std::ios_base::sync_with_stdio(false);std::cin.tie(nullptr);int t;std::cin >> t;for (int ti = 1; ti <= t; ++ti) {// std::cerr << "Solve : " << ti << '\n';Solve(); }return 0;
}
http://www.zskr.cn/news/16218.html

相关文章:

  • 李臻20242817_安全文件传输系统项目报告_第14周 - 指南
  • 33 ACwing 294 Count The Repetitions 题解
  • 11 ACwing 281 Coins 题解
  • 4 ACwing 274 Mobile Service 题解
  • 2 ACwing 272 LCIS 最长公共上升子序列 题解
  • 用 Haxe 实现英文数字验证码识别
  • 差分约束模板
  • QOJ7411 Bitwise Xor
  • 完整教程:SOC-ESP32S3部分:25-HTTP请求
  • 第一次使用Ttpora
  • NKOJ全TJ计划——NP11744
  • ROIR 2025
  • python编写AI生常用匡架及使用指令集
  • 123123
  • 2025.10.5 2024CCPC郑州
  • 20250531MATLAB三维绘图 - 教程
  • 概率期望dp 复习笔记
  • 完整教程:爬虫--以爬取小说为例
  • 仅需3%训练数据的文本归一化技术
  • 完整教程:56、Ocelot 概述
  • 【音视频】FFmpeg 编码H265 - 实践
  • Windows系统安装MySQL Connector 利用C++ VS2022连接MySQL
  • C/C++与Java、Python、Go在各个阶段的区别
  • [省选联考 2025] 图排列 题解
  • 实用指南:UV 包管理工具:替代 pip 的现代化解决方案
  • 2025焚烧炉厂家权威推荐,技术实力与市场口碑深度解析
  • 从价值博弈到价值原语博弈的跃迁:降维解析与升维求解的工程实现——声明Ai研究
  • 2025电缆厂家最新推荐排行榜:深度解析青岛一缆等六家优质企业实力,助力精准选购
  • 1 洛谷题解修正器