Codeforces 741 D - Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

D - Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

思路:

樹上啟發式合并

從根節點出發到每個位置的每個字符的奇偶性記為每個位置的狀態,每次統計一下每個狀態的最大深度

為了保證鏈經過當前節點u,我們先計算每個子樹的答案,再更新子樹狀態對深度的貢獻。

代碼:

#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC optimize(4)
#include<bits/stdc++.h>
using namespace std;
#define y1 y11
#define fi first
#define se second
#define pi acos(-1.0)
#define LL long long
#define ls rt<<1, l, m
#define rs rt<<1|1, m+1, r
//#define mp make_pair
#define pb push_back
#define ULL unsigned LL
#define pll pair<LL, LL>
#define pli pair<LL, int>
#define pii pair<int, int>
#define piii pair<pii, int>
#define pdi pair<double, int>
#define pdd pair<double, double>
#define mem(a, b) memset(a, b, sizeof(a))
#define debug(x) cerr << #x << " = " << x << "\n";
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//head

inline int read() {int a = 1, b = 0;char ch = getchar();while(ch < '0' || ch > '9') {if(ch == '-') a = -1;ch = getchar();}while('0' <= ch && ch <= '9') {b = b*10 + ch-'0';ch = getchar();}return a*b;
}
const int N = 5e5 + 5, M = 5e6 + 5;
const int INF = 1e8;
vector<pii> g[N];
int n, p, dp[N], sz[N], son[N], deep[N], st[N], mx[M];
char c[2];
void get_son(int u, int o) {sz[u] = 1;deep[u] = deep[o] + 1;for (int i = 0; i < g[u].size(); ++i) {int v = g[u][i].fi;int w = g[u][i].se;st[v] = st[u] ^ (1<<w);get_son(v, u);if(sz[v] > sz[son[u]]) son[u] = v;sz[u] += sz[v];}
}
void CAL(int p, int u) {if(mx[st[u]] >= 0) dp[p] = max(dp[p], mx[st[u]]+deep[u]-2*deep[p]);for (int i = 0; i < 22; ++i) {if(mx[st[u]^(1<<i)] >= 0) dp[p] = max(dp[p], mx[st[u]^(1<<i)]+ deep[u]-2*deep[p]);}for (int i = 0; i < g[u].size(); ++i) {int v = g[u][i].fi;CAL(p, v);}
}
void ADD(int u) {mx[st[u]] = max(mx[st[u]], deep[u]);for (int i = 0; i < g[u].size(); ++i) {int v = g[u][i].fi;ADD(v);}
}
void DELETE(int u) {if(mx[st[u]] >= 0) mx[st[u]] = -INF;for (int i = 0; i < g[u].size(); ++i) {int v = g[u][i].fi;DELETE(v);}
}
void dfs(int u) {for (int i = 0; i < g[u].size(); ++i) {int v = g[u][i].fi;if(v != son[u]) {dfs(v);DELETE(v);}}if(son[u]) dfs(son[u]);if(mx[st[u]] >= 0) dp[u] = mx[st[u]] - deep[u];for (int i = 0; i < 22; ++i) {if(mx[st[u]^(1<<i)] >= 0) dp[u] = max(dp[u], mx[st[u]^(1<<i)] - deep[u]);}mx[st[u]] = max(mx[st[u]], deep[u]);for (int i = 0; i < g[u].size(); ++i) {int v = g[u][i].fi;if(v != son[u]) {CAL(u, v);ADD(v);}}for (int i = 0; i < g[u].size(); ++i) {int v = g[u][i].fi;dp[u] = max(dp[u], dp[v]);}
}
int main() {n = read();for (int i = 2; i <= n; ++i) {p = read();scanf("%s", c);g[p].pb({i, c[0]-'a'});}get_son(1, 0);for (int i = 0; i < M; ++i) mx[i] = -INF;dfs(1);for (int i = 1; i <= n; ++i) printf("%d%c", dp[i], " \n"[i==n]);return 0;
}

?

轉載于:https://www.cnblogs.com/widsom/p/10773406.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275259.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275259.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275259.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

figma下載_切換到Figma并在其中工作不必是火箭科學,這就是為什么

figma下載We have seen Elon Musk and SpaceX making Rocket Science look like a child’s play. In the same spirit, should design tools be rocket science that is too hard to master? Not at all.我們已經看到埃隆馬斯克(Elon Musk)和SpaceX使Rocket Science看起來像是…

npm、yarn、cnpm、pnpm 使用操作都在這了

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12有時候想查個命令&#xff0c;或者換個鏡像找了幾篇文章才找到&#xff0c;最近閑著沒事干&#xff0c;干脆整理一篇文檔&#xff0c;以后就不用在網上瞎搜有的還寫不全。Usage…

CAN控制器的選擇

在進行CAN總線開發前&#xff0c;首先要選擇好CAN總線控制器。下面就比較一些控制器的特點。 一些主要的CAN總線器件產品 制造商 產品型號 器件功能及特點 Intel 82526 82527 8XC196CA/CB CAN通信控制器&#xff0c;符合CAN2.0A CAN通信控制器&#xff0c;符合CAN2.0B 擴展…

洛谷 4115 Qtree4——鏈分治

題目&#xff1a;https://www.luogu.org/problemnew/show/P4115 論文&#xff1a;https://wenku.baidu.com/view/1bc2e4ea172ded630b1cb602.html 重鏈剖分&#xff0c;分別用線段樹維護每條重鏈。線段樹葉子的信息是該點輕孩子的信息&#xff1b;線段樹區間的信息是考慮重鏈的一…

每次啟動項目的服務,電腦竟然乖乖的幫我打開了瀏覽器,100行源碼揭秘!

1. 前言大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12 參與&#xff0c;已進行三個月了&#xff0c;大家一起交流學習&#xff0c;共同進步。想學源碼&#xff0c;極力推薦之前我寫的《學習源碼整體架構系列》 包含jQuery、…

初級爬蟲師_初級設計師的4條視覺原則

初級爬蟲師重點 (Top highlight)Like many UXers, I got into the industry from a non-visual background (in my case it was Business and later on Human Cognition). Even though I found great benefits coming from those backgrounds, it also meant I had no UI/Visua…

String類中IndexOf與SubString

IndexOfpublic: int IndexOf( String^ value, int startIndex, int count ) 說明&#xff1a; value類型&#xff1a;System..::.String要查找的 String。 startIndex類型&#xff1a;System..::.Int32搜索起始位置。 count類型&#xff1a;System..::.Int32要檢查的字符位置…

開源監控解決方案OpenFalcon系列(一)

OpenFalcon是由小米的運維團隊開源的一款企業級、高可用、可擴展的開源監控解決方案&#xff0c;&#xff0c;在眾多開源愛好者的支持下&#xff0c;功能越來越豐富&#xff0c;文檔更加的完善&#xff0c;OpenFalcon 已經成為國內最流行的監控系統之一。小米、美團、金山云、快…

如何利用 webpack 在項目中做出亮點

大家好&#xff0c;我是若川。最近這幾年&#xff0c;在前端代碼打包器領域內&#xff0c;webpack 算得上是時下最流行的前端打包工具。它可以分析各個模塊的依賴關系&#xff0c;最終打包成我們常見的靜態文件&#xff1a;.js 、 .css 、 .jpg 、.png&#xff0c;極大地提升了…

[轉]上下拉電阻

上下拉電阻有什么用&#xff1f; 對這個問題&#xff0c;平時沒有留意過&#xff0c;搞設計的時候都是照本宣科&#xff0c;沒有真正弄懂意思&#xff0e; 很多單片機開發的入門者&#xff0c;以及一些從事軟件開發的人&#xff0c;往往在開發單片機的時候遇到上拉電阻、下拉…

yum安裝Mariadb,二進制安裝Mariadb

yum安裝Mariadb 設置Mariadb的yum源 vim /etc/yum.repos.d/mariadb.repo [mariadb] namemariadb baseurlhttps://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.2/centos7-amd64/ gpgcheck0 使用清華yum源安裝Mariadb,可以選擇不同的版本&#xff0c;此處安裝10.2.23 yum in…

Oracle中的wmsys.wm_concat

Oracle中的wmsys.wm_concat主要實現行轉列功能(說白了就是將查詢的某一列值使用逗號進行隔開拼接&#xff0c;成為一條數據)。 wmsys.wm_concat除了單獨使用外還可以和over函數結合使用。 開始看看具體使用方法&#xff1a; select t.rank, t.Name from t_menu_item t; rank…

Github 王炸功能!Copilot 替代打工人編程?

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12 參與&#xff0c;已進行三個月了&#xff0c;大家一起交流學習&#xff0c;共同進步。大家好&#xff0c;我是皮湯。最近組里在討論一個有意思的工具 Github Copilot&#xff…

ux和ui_糟糕的UI與UX番茄醬模因

ux和uiAt face value, this meme appears to be a quick and easy tool for educating the general public about what the differences are between UI and UX. You might look at the attractive glass bottle labeled “UI” and understand that UI might have to do more …

Linux中的wheel用戶組是什么?

在Linux中wheel組就類似于一個管理員的組。 通常在Linux下&#xff0c;即使我們有系統管理員root的權限&#xff0c;也不推薦用root用戶登錄。一般情況下用普通用戶登錄就可以了&#xff0c;在需要root權限執行一些操作時&#xff0c;再su登錄成為root用戶。但是&#xff0c;任…

ElementUI 組件庫 md-loader 的解析和優化

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12 參與&#xff0c;已進行三個月了&#xff0c;大家一起交流學習&#xff0c;共同進步。背景相信很多同學在學習 webpack 的時候&#xff0c;對 loader 的概念應該有所了解&…

一個html5流星雨源碼

流星會隨著鼠標的方向劃過&#xff0c;按緊鼠標左鍵可以增長流星的尾巴。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang"zh-CN"> <head> <title>流星雨<…

csdn 用戶 螞蟻翹大象_用戶界面設計師房間里的大象

csdn 用戶 螞蟻翹大象Once upon a time, an educated eye detected a new trend in UI designs, particularly, in Dribbble. It was a conceptual proposition, not an actual design for a customer or an app. Trying to explain the characteristics of this new trend, a …

面試官問發布訂閱模式是在問什么?

大家好&#xff0c;我是若川。最近組織了源碼共讀活動&#xff0c;感興趣的可以加我微信 ruochuan12 參與&#xff0c;已進行了三個多月&#xff0c;大家一起交流學習&#xff0c;共同進步。本文來自 simonezhou 小姐姐投稿的第八期筆記。面試官常問發布訂閱、觀察者模式&#…

linux服務器內存、根目錄使用率、某進程的監控告警腳本

腳本內容如下 #!/bin/bash#磁盤超過百分之80發送郵件告警DISK_USEDdf -T |sed -n "2p" |awk {print ($4/$3)*100}DISK_percentage80if [ expr "$DISK_USED > $DISK_percentage" ]thenecho "$HOSTNAME服務器當前硬盤使用率為$DISK_USED%" | ma…