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

海南网站建设平台适合程序员的wordpress主题

海南网站建设平台,适合程序员的wordpress主题,基于php的电子商城网站建设,wordpress菜单相对地址题目链接 如果 ∀ t [ i ] 0 \forall t[i] 0 ∀t[i]0,直接输出 0 0 0。 由于题中所给是 n n n 个点 n n n 条边的 连通图,我们可以得到这是一棵基环树。 我们把答案分为三类: 以环上某点 i i i 为根的树的直径;从某个树…

题目链接

如果 ∀ t [ i ] = 0 \forall t[i] = 0 t[i]=0,直接输出 0 0 0

由于题中所给是 n n n 个点 n n n 条边的 连通图,我们可以得到这是一棵基环树。

我们把答案分为三类:

  • 以环上某点 i i i 为根的树的直径;
  • 从某个树的叶子出发到达环上的根 i i i绕过 整个环,回到 i i i,再走向 i i i 的另一个儿子直到叶子;
  • 从某个树的叶子出发到达环上的根 i i i不绕过 整个环,走到环上另一点 j j j,再走向 j j j 的一个儿子直到叶子。

首先,我们找到基环树的环,环长为 m m m,然后对于每颗树,都预处理出 m d e p [ i ] \rm{mdep[i]} mdep[i] s d e p [ i ] \rm{sdep[i]} sdep[i],分别表示以 i i i 为根的树的深度最大值和次大值,这个一次 d f s \rm{dfs} dfs 就能做到。

然后对于长度为 m m m 的环,设顺时针(或逆时针)第 i i i 个点为 v e c [ i ] , i ∈ [ 0 , m ) \rm{vec[i]}, \ i \in [0, m) vec[i], i[0,m),我们破环成链,令 v e c [ i + m ] = v e c [ i ] \rm{vec[i + m] = vec[i]} vec[i+m]=vec[i],再做一个前缀和,即

s [ i + 1 ] = s [ i ] + t [ v e c [ i ] ] , i ∈ [ 0 , 2 m ) . \rm{s[i + 1] = s[i] + t[vec[i]]}, \ i \in [0, 2m). s[i+1]=s[i]+t[vec[i]], i[0,2m).

这样三类的答案就分别是:

  • 第一类:
    m d e p [ i ] + s d e p [ i ] + t [ i ] , ∀ i ∈ [ 0 , n ) . \rm{mdep[i] + sdep[i] + t[i]}, \ \forall i \in [0, n). mdep[i]+sdep[i]+t[i], ∀i[0,n).
  • 第二类:
    m d e p [ v e c [ i ] ] + s d e p [ v e c [ i ] ] + s [ m ] , ∀ i ∈ [ 0 , m ) . \rm{mdep[vec[i]] + sdep[vec[i]] + s[m], \ \forall i \in [0, m)}. mdep[vec[i]]+sdep[vec[i]]+s[m], ∀i[0,m).
  • 第三类:
    m d e p [ v e c [ i ] ] + ( s [ i + 1 ] − s [ j ] ) + m d e p [ v e c [ j ] ] , 0 ≤ j < i < 2 m , i − j < m . \rm{mdep[vec[i]] + (s[i + 1] - s[j]) + mdep[vec[j]]}, \ 0 \leq j < i < 2m, \ i - j < m. mdep[vec[i]]+(s[i+1]s[j])+mdep[vec[j]], 0j<i<2m, ij<m.

第一、二类要求最大值直接 O ( n ) O(n) O(n) 遍历即可,第三类则需要对式子变形,变为

( m d e p [ v e c [ i ] ] + s [ i + 1 ] ) + ( m d e p [ v e c [ j ] ] − s [ j ] ) , \rm{(mdep[vec[i]] + s[i + 1]) + (mdep[vec[j]] - s[j])}, (mdep[vec[i]]+s[i+1])+(mdep[vec[j]]s[j]),

这样一来对每个 i i i,就只要维护 m d e p [ v e c [ j ] ] − s [ j ] \rm{mdep[vec[j]] - s[j]} mdep[vec[j]]s[j] 的最大值,其中

j ∈ [ max ⁡ ( 0 , i − m + 1 ) , i ) , \rm{j \in [\max(0, i - m + 1), \ i),} j[max(0,im+1), i),

这可以用单调队列实现,时间复杂度 O ( n ) O(n) O(n)

时间复杂度 O ( n ) O(n) O(n)

C++ Code

#include <bits/stdc++.h>template<class T>
std::istream &operator>>(std::istream &is, std::vector<T> &v) {for (auto &x: v) {is >> x;}return is;
}
template<class T>
void chmax(T &a, T b) {if (a < b) {a = b;}
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int n;std::cin >> n;std::vector<int> t(n);std::cin >> t;if (std::ranges::count(t, 0) == n) {std::cout << 0 << "\n";return 0;}std::vector<std::vector<int>> adj(n);for (int i = 0; i < n; i++) {int u, v;std::cin >> u >> v;u--, v--;adj[u].push_back(v);adj[v].push_back(u);}int idx = 0;std::vector<int> vec;vec.reserve(n);std::vector<bool> ins(n);std::vector<bool> cyc(n);std::vector<int> dfn(n, -1);std::vector<int> pre(n, -1);auto init = [&](auto &&self, int x) -> void {dfn[x] = idx++;ins[x] = true;for (int y: adj[x]) {if (y == pre[x]) {continue;}if (dfn[y] == -1) {pre[y] = x;self(self, y);} else if (ins[y]) {for (int i = x; ; i = pre[i]) {vec.push_back(i);cyc[i] = true;if (i == y) {break;}}}}ins[x] = false;};init(init, 0);std::vector<int> mdep(n);std::vector<int> sdep(n);std::ranges::fill(pre, -1);auto tree = [&](auto &&self, int x) -> void {for (int y: adj[x]) {if (y == pre[x] or cyc[y]) {continue;}pre[y] = x;self(self, y);if (mdep[x] < mdep[y] + t[y]) {sdep[x] = mdep[x];mdep[x] = mdep[y] + t[y];} else if (sdep[x] < mdep[y] + t[y]) {sdep[x] = mdep[y] + t[y];}}};int res = 0;for (int i: vec) {tree(tree, i);chmax(res, mdep[i] + sdep[i]);}int dia = 0;for (int i = 0; i < n; i++) {chmax(dia, mdep[i] + sdep[i] + t[i]);}int m = vec.size();vec.insert(vec.end(), vec.begin(), vec.end());std::vector<int> s(2 * m + 1);for (int i = 0; i < 2 * m; i++) {s[i + 1] = s[i] + t[vec[i]];}int ans = std::max(dia, res + s[m]);std::deque<int> q;for (int i = 0; i < 2 * m; i++) {int j = vec[i];while (not q.empty() and i - q.front() >= m) {q.pop_front();}if (not q.empty()) {chmax(ans, mdep[j] + s[i + 1] + mdep[vec[q.front()]] - s[q.front()]);}while (not q.empty() and mdep[vec[q.back()]] - s[q.back()] <= mdep[j] - s[i]) {q.pop_back();}q.push_back(i);}std::cout << ans << "\n";return 0;
}

文章转载自:

http://8NMPKKAz.qngcq.cn
http://wdFgfz4o.qngcq.cn
http://VvL8Egn0.qngcq.cn
http://MSIDAP2I.qngcq.cn
http://xJeg528Q.qngcq.cn
http://XRuFlrgG.qngcq.cn
http://yRgzekMU.qngcq.cn
http://27RcTX9G.qngcq.cn
http://I2aoD0ox.qngcq.cn
http://05obpn8a.qngcq.cn
http://BVnLNhpB.qngcq.cn
http://WYCRyYMe.qngcq.cn
http://S5sHH0BS.qngcq.cn
http://xUtiSzCm.qngcq.cn
http://nnlqheug.qngcq.cn
http://LU0TzRcd.qngcq.cn
http://PZindHeS.qngcq.cn
http://5aBzLD4V.qngcq.cn
http://mv6zbkWD.qngcq.cn
http://tyBIwRDL.qngcq.cn
http://Qn6C4grU.qngcq.cn
http://cxqsvywU.qngcq.cn
http://w5Vc8mGN.qngcq.cn
http://7M3gXCCc.qngcq.cn
http://NN1Y6xSz.qngcq.cn
http://4GR6IOYu.qngcq.cn
http://eBkEjbRK.qngcq.cn
http://jCQFLP48.qngcq.cn
http://c8jsX7sc.qngcq.cn
http://KtwPp5cP.qngcq.cn
http://www.dtcms.com/wzjs/737231.html

相关文章:

  • 长春h5建站模板黄骅市官网
  • 网站建设 中企动力 常州wordpress 背景音乐
  • 网站分享链接怎么做泰安城市建设吧
  • 外贸网站平台有几个wordpress禁主题
  • 专门做音箱的网站做网站租用那个服务器好
  • 做ppt的软件怎么下载网站如何编写一个网站
  • 合肥做网站mdyun前端开发的软件
  • 沙洋网站开发黄浦手机网站建设
  • 可以做淘宝客的网站文章资讯类网站模板
  • wordpress 总站模板哪里有网站建站公司
  • 漫画网站开发wordpress主题简
  • 2019年建设什么网站好单页面网站有哪些内容
  • 黑色大气网站企业个性化网站建设费用
  • 专业企业网站建设多少钱服务企业网站建设方案书前言
  • 可以写代码的网站微分销平台怎么样
  • 建站工具指北seo关键词怎么选择
  • 播放器网站怎么做电子商务专业就业前景好不好
  • 建设银行网站卡死网站分类导航代码
  • 郑州易站通网站公司企业logo设计的建议
  • 手机网站建设报价表定制网站开发公司电话
  • 开发区网站建设音乐网站建设程序
  • 男女做那个全面视频网站网络营销平台的优势
  • 哈尔滨定制网站建设网站源码区别
  • 做网站要什么资料温州建站平台
  • 凉山州建设网站制作网站详细步骤
  • 编写网站方案设计书表格网络文化经营许可证申请条件
  • 沈阳网站模板如何开发一个软件平台
  • 公司网站设计维护网页制作设计多少费用
  • 有的网站显示正在建设中自己开发小程序
  • 网站换域名seo怎么做江苏建筑信息平台