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

做网站建设需要做哪些工作室什么平台可以打广告做宣传

做网站建设需要做哪些工作室,什么平台可以打广告做宣传,网站建设进度计划表,杭州网站建设文章目录 题目算法标签: d f s dfs dfs, 树上差分思路 d f s dfs dfs代码树上差分代码 题目 CF29D Ant on the Tree 算法标签: d f s dfs dfs, 树上差分 思路 由于点的数量很少 300 300 300, 因此时间复杂度在 O ( n 3 ) O(n ^ 3) O(n3)之内都可以通过, 考虑 d f s dfs dfs,…

题目

CF29D Ant on the Tree
在这里插入图片描述

算法标签: d f s dfs dfs, 树上差分

思路

由于点的数量很少 300 300 300, 因此时间复杂度在 O ( n 3 ) O(n ^ 3) O(n3)之内都可以通过, 考虑 d f s dfs dfs, 从叶子结点开始搜, 因为 d f s dfs dfs记录顺序是逆序, 因此倒着搜就是正序, 时间复杂度 O ( n 2 ) O(n ^ 2) O(n2)

d f s dfs dfs代码

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>using namespace std;const int N = 310;vector<int> head[N], ans;void add(int u, int v) {head[u].push_back(v);
}bool dfs(int u, int fa, int t) {if (u == t) return true;for (int v : head[u]) {if (v != fa && dfs(v, u, t)) {ans.push_back(v);return true;}}return false;
}int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int n;cin >> n;for (int i = 0; i < n - 1; ++i) {int u, v;cin >> u >> v;add(u, v), add(v, u);}int t = 1, s;while (cin >> s) dfs(s, 0, t), t = s;dfs(1, 0, t);ans.push_back(1);if (ans.size() != 2 * n - 1) {cout << -1 << "\n";return 0;}for (int x : ans) cout << x << " ";cout << "\n";return 0;
}

树上差分代码

在差分过程中, 计算每个节点应该经过的次数, 然后在统计的时候就能计算出每个节点应该被经过多少次, 从而判断是否是合法的

#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>using namespace std;const int N = 310, M = 10;int n;
int fa[N][M], depth[N];
int diff[N], order[N], cnt;
vector<int> head[N];void add(int u, int v) {head[u].push_back(v);
}void dfs(int u, int pre, int dep) {fa[u][0] = pre, depth[u] = dep;int is_leaf = 1;for (int v : head[u]) {if (v == pre) continue;dfs(v, u, dep + 1);is_leaf = 0;}cnt += is_leaf;
}int lca(int u, int v) {if (depth[u] < depth[v]) swap(u, v);for (int i = M - 1; i >= 0; --i) {if (depth[fa[u][i]] >= depth[v]) u = fa[u][i];}if (u == v) return u;for (int i = M - 1; i >= 0; --i) {if (fa[u][i] != fa[v][i]) {u = fa[u][i];v = fa[v][i];}}return fa[u][0];
}void check(int u, int pre) {for (int v : head[u]) {if (v == pre) continue;check(v, u);diff[u] += diff[v];}if (u > 1 && diff[u] != 2) {cout << -1 << "\n";exit(0);}
}void move(int u, int v) {int rev = 0;if (depth[u] < depth[v]) {swap(u, v);rev = 1;}vector<int> ans;while (u != v) {ans.push_back(rev ? u : fa[u][0]);u = fa[u][0];}if (rev) reverse(ans.begin(), ans.end());for (int u : ans) cout << u << " ";
}int main() {ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);cin >> n;for (int i = 0; i < n - 1; ++i) {int u, v;cin >> u >> v;add(u, v), add(v, u);}dfs(1, 0, 1);// 处理倍增数组for (int i = 1; i < M; ++i) {for (int u = 1; u <= n; ++u) {fa[u][i] = fa[fa[u][i - 1]][i - 1];}}// 起点终点都是1order[0] = order[cnt + 1] = 1;// 处理差分数组for (int i = 1; i <= cnt; ++i) {if (i <= cnt) cin >> order[i], diff[order[i]] += 2;int p = lca(order[i - 1], order[i]);diff[p] -= 2;}check(1, 0);cout << "1 ";for (int i = 1; i <= cnt + 1; ++i) {int p = lca(order[i - 1], order[i]);move(order[i - 1], p);move(p, order[i]);}cout << "\n";return 0;
}
http://www.dtcms.com/a/415167.html

相关文章:

  • Python爬虫实战:获取金价查询网最新金价行情与数据分析
  • 长春网站建设seo推广方式方法
  • 【MySQL✨】MySQL 入门之旅 · 第八篇:数据排序与分组
  • deepseek Kotlin Flow 全面详解
  • MTK-Android13-Dialer 通话界面定制修改
  • 化妆品电子商务网站开发流程描述中山网站建设推荐
  • 宿州移动网站建设广州模板网站
  • 旅游景区网站建设哈尔滨发布信息的网站
  • RVC WebUI(Retrieval-based-Voice-Conversion-WebUI)配置
  • 在线制作简历网站网页结构布局
  • 建网站要备案东莞网站制作品牌祥奔科技
  • 棋盘覆盖问题
  • 大邑网站建设百合居装饰公司官网
  • C++基础(3)-类的6个默认成员函数
  • 做营销型网站需要注意哪些点开发小程序费用
  • AI“点亮”萤火虫:边缘机器学习让微光成像走进4K时代
  • 【手撕机器学习 02】手撕算法的基石:精通NumPy与Pandas向量化思维
  • 一种好用开发的轻量级 Markdown 编辑器
  • 网站用户管理系统徐州市城乡建设局网站
  • 花店网站首页模版帝国cms使用教程
  • React-router v6学生管理系统笔记
  • 手写签名太麻烦?智能签名生成器免费实测 智能签名生成器、智能签名生成器使用、免费电子签名工具、Windows 电子签名软件、办公效率工具
  • 建设银行六安市分行网站hreflang wordpress
  • N8N Workflow Collection - 专业级自动化工作流库
  • 有没有专业做特产的网站小企业如何建网站
  • Android 6.0+ 动态权限请求模块,这个模块会包含 权限检查、请求、结果处理 等核心功能,并且支持 单个 / 多个权限请求、权限拒绝后的引导
  • Android -自定义Binding Adapter实战应用
  • 网站优化提升速度网站建设权利义务
  • 【复现】一种基于价格弹性矩阵的居民峰谷分时电价激励策略【需求响应】
  • 【怎么复制cmd命令行里面的文字输出和报错】