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

【Luogu】每日一题——Day21. P3556 [POI 2013] MOR-Tales of seafaring (图论)

P3556 [POI 2013] MOR-Tales of seafaring - 洛谷

题目:

思路:

有点分层图的感觉

由于题目不是要求简单路径,因此我们可以反复走来刷路径,那么一个思路就是求最短路

如果对于询问 s->t 是否存在 d,那么就有两种情况,一个是 d < dis,即小于最短路,那么此时肯定无解,否则一定有解,具体的,如果 d 是奇数,那么我们可以考虑一个走了奇数步的最短路,然后反复刷步数得到,而偶数也是一样的考虑偶数

所以维护奇数偶数的最短路即可,spfa秒了

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;#define yes cout << "YES" << endl
#define no cout << "NO" << endl
vector<vector<short>> g(5005);
int dis[5005][2];
bool inq[5005];
int n, m, k;
bool ans[1000005];
bool hasfa[5005];struct MyStruct
{int b, d, id;
};
vector<vector<MyStruct>> ask(5005);void spfa(int fa)
{memset(dis, 0x3f, sizeof dis);memset(inq, 0, sizeof inq);queue<int> q;dis[fa][0] = 0;inq[fa] = 1;q.push(fa);while (!q.empty()){auto t = q.front();q.pop();inq[t] = 0;for (auto & son : g[t]){if (dis[son][1] > dis[t][0] + 1){dis[son][1] = dis[t][0] + 1;if (!inq[son]){inq[son] = 1;q.push(son);}}if (dis[son][0] > dis[t][1] + 1){dis[son][0] = dis[t][1] + 1;if (!inq[son]){inq[son] = 1;q.push(son);}}}}
}void solve()
{cin >> n >> m >> k;for (int i = 0; i < m; i++){int u, v;cin >> u >> v;g[u].emplace_back(v);g[v].emplace_back(u);hasfa[u] = hasfa[v] = 1;}for (int i = 0; i < k; i++){int a, b, d;cin >> a >> b >> d;ask[a].push_back({ b, d, i });}for (int i = 1; i <= n; i++){if (!hasfa[i] || ask[i].empty()){continue;}spfa(i);for (auto & query : ask[i]){ans[query.id] = (query.d >= dis[query.b][query.d & 1]);}}for (int i = 0; i < k; i++){cout << (ans[i] ? "TAK" : "NIE") << endl;}
}
signed main()
{cin.tie(0)->sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

http://www.xdnf.cn/news/1317421.html

相关文章:

  • 上网行为组网方案
  • 数据结构03(Java)--(递归行为和递归行为时间复杂度估算,master公式)
  • Mac(五)自定义鼠标滚轮方向 LinearMouse
  • Linux软件编程:进程与线程(线程)
  • JVM学习笔记-----StringTable
  • Docker Compose 安装 Neo4j 的详细步骤
  • PostgreSQL导入mimic4
  • go基础学习笔记
  • k8s集群搭建一主多从的jenkins集群
  • Win11 文件资源管理器预览窗格显示 XAML 文件内容教程
  • C++ vector的使用
  • 10 SQL进阶-SQL优化(8.15)
  • 说一下事件委托
  • Java 大视界 -- Java 大数据分布式计算在基因测序数据分析与精准医疗中的应用(400)
  • 【UEFI系列】ACPI
  • 跨越南北的养老对话:为培养“银发中国”人才注入新动能
  • JavaScript 性能优化实战:从评估到落地的全链路指南
  • Spark03-RDD02-常用的Action算子
  • 在鸿蒙中实现深色/浅色模式切换:从原理到可运行 Demo
  • E2B是一个开源基础设施,允许您在云中安全隔离的沙盒中运行AI生成的代码和e2b.dev网站
  • Diamond基础2:开发流程之LedDemo
  • c_str()函数的详细解析
  • 简单的 VSCode 设置
  • (nice!!!)(LeetCode 每日一题) 837. 新 21 点 (动态规划、数学)
  • bash shell 入门
  • 云智智慧停充一体云-allnew全新体验-路内停车源码+路外停车源码+充电桩源码解决方案
  • Rust:DLL 输出对象的生命周期管理
  • API生命周期10阶段
  • 原子操作及基于原子操作的shared_ptr实现
  • Baumer高防护相机如何通过YoloV8深度学习模型实现工作设备状态的检测识别(C#代码UI界面版)