<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      解決樹上詢問問題,沒有修改
      時間復雜度:\(O(nlogn)\)

      例題:https://codeforc.es/contest/600/problem/E
      題意:給定一顆樹,每個節點有一個顏色,求出子樹中顏色最多的顏色值之和。

      代碼:

      #include<bits/stdc++.h>
      using namespace std;
      using LL = long long;
      vector<int> color;
      struct HLD{
              vector<vector<int>> e;
      	vector<int> siz, son, cnt;
              vector<LL> ans;
      	LL sum, Max;
      	int hson;
      	HLD(int n){
      		e.resize(n + 1);
      		siz.resize(n + 1);
      		son.resize(n + 1);
      		ans.resize(n + 1);
      		cnt.resize(n + 1);
      		hson = 0;
      		sum = 0;
      		Max = 0;
      	}
      	void add(int u, int v){
      		e[u].push_back(v);
      		e[v].push_back(u);
      	}
      	void dfs1(int u, int fa){
      		siz[u] = 1;
      		for (auto v : e[u]){
      			if (v == fa) continue;
      			dfs1(v, u);
      			siz[u] += siz[v];
      			if (siz[v] > siz[son[u]]) son[u] = v;
      		}
      	}
      	void calc(int u, int fa, int val){
      		cnt[color[u]] += val;
      		if (cnt[color[u]] > Max){
      			Max = cnt[color[u]];
      			sum = color[u];
      		}
      		else if (cnt[color[u]] == Max){
      			sum += color[u];
      		}
      		for (auto v : e[u]){
      			if (v == fa || v == hson) continue;
      			calc(v, u, val);
      		}
      	}
      	void dfs2(int u, int fa, int op){
      		for (auto v : e[u]){
      			if (v == fa || v == son[u]) continue;
      			dfs2(v, u, 0);
      		}
      		if (son[u]){
      			dfs2(son[u], u, 1);
      			hson = son[u];	//記錄重鏈編號,計算的時候跳過
      		}
      		calc(u, fa, 1);
      		hson = 0;	//消除的時候所有兒子都清除
      		ans[u] = sum;
      		if (!op){
      			calc(u, fa, -1);
      			sum = 0;
      			Max = 0;
      		}
      	}
      };
      int main(){
      	ios::sync_with_stdio(false);cin.tie(0);
      	int n;
      	cin >> n;
      	color.resize(n + 1);
      	for (int i = 1; i <= n; i ++ ){
      		cin >> color[i];
      	}
      	HLD t(n);
      	for (int i = 0; i < n - 1; i ++ ){
      		int u, v;
      		cin >> u >> v;
      		t.add(u, v);
      	}
      	t.dfs1(1, 0);
      	t.dfs2(1, 0, 0);
      	for (int i = 1; i <= n; i ++ ){
      		cout << t.ans[i] << " \n"[i == n];
      	}
      	return 0;
      }
      

      https://www.luogu.com.cn/problem/U41492 統計子樹顏色數量

      posted on 2023-05-05 17:36  Hamine  閱讀(76)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 于田县| 成人免费A级毛片无码片2022| 亚洲中文字幕一区二区| 国产成人a在线观看视频免费| 日产中文字幕在线精品一区| 极品一区二区三区水蜜桃| 中文字幕 欧美日韩| 亚洲鸥美日韩精品久久| 亚洲综合伊人久久大杳蕉| 老王亚洲AV综合在线观看| 久久精品无码精品免费专区| 亚洲人成日韩中文字幕不卡| 国产伦码精品一区二区| 国产精品天天狠天天看| 国产乱码日产乱码精品精| 日韩精品一区二区三区人| 国产精品久久一区二区三区| 亚洲综合精品一区二区三区| 色综合天天综合网国产人| 精品无码一区在线观看| 长乐市| 加勒比无码人妻东京热| 亚洲成人av免费一区| 无码人妻精品一区二区在线视频 | 日韩永久永久永久黄色大片| 亚洲国产高清在线观看视频| 成人国产精品一区二区不卡| 国产欧美综合在线观看第十页| 性色av极品无码专区亚洲| 性色av无码不卡中文字幕| 国产午精品午夜福利757视频播放 国产午夜亚洲精品国产成人 | 色成人精品免费视频| 国产亚洲人成网站观看| 亚洲人成网站77777在线观看| 免费无码又爽又刺激网站直播| 亚洲理论在线A中文字幕| 成年男女免费视频网站| 欧洲免费一区二区三区视频| 少妇粗大进出白浆嘿嘿视频| 长寿区| 国产精品无码素人福利不卡|