国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

D. Li Hua and Tree(set操作)

這篇具有很好參考價(jià)值的文章主要介紹了D. Li Hua and Tree(set操作)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Problem - D - Codeforces

D. Li Hua and Tree(set操作)

?

李華有一個(gè)有n個(gè)頂點(diǎn)和n -1條邊的樹(shù)。樹(shù)的根是頂點(diǎn)1。每個(gè)頂點(diǎn)i的重要性為a。將子樹(shù)的大小表示為該子樹(shù)中頂點(diǎn)的數(shù)量,將重要性表示為該子樹(shù)中頂點(diǎn)的重要性之和。將非葉頂點(diǎn)的重子結(jié)點(diǎn)表示為具有最大子樹(shù)大小的子結(jié)點(diǎn)。如果存在多個(gè)重子,則重子的指數(shù)最小。李華想做m個(gè)操作:“1 x”(1≤x≤n) -計(jì)算根為x的子樹(shù)的重要性。"2 x"(2≤x≤n) -旋轉(zhuǎn)z的重子。形式上,表示son為a的重子,fa為z的父親。他想去掉和fa之間的邊,并在son和fa之間連接一條邊。可以保證z不是根結(jié)點(diǎn),但不能保證z不是葉結(jié)點(diǎn)。如果是葉,請(qǐng)忽略該操作。假設(shè)你是李華,請(qǐng)解決這個(gè)問(wèn)題。輸入第一行包含2個(gè)整數(shù)n, m (2<n <105, 1 < m <105) -樹(shù)中的頂點(diǎn)數(shù)和操作數(shù)。第二行包含n個(gè)整數(shù)a1, a2,…, an(-10°< ai < 10°)-每個(gè)頂點(diǎn)的重要性。接下來(lái)的n -1行包含樹(shù)的邊。第i行包含兩個(gè)整數(shù)ui和vi (1 < ui, vi≤n, ui vi) -對(duì)應(yīng)的邊。給定的邊構(gòu)成了一棵樹(shù)。接下來(lái)的m行包含操作——每行一個(gè)操作。第j個(gè)操作包含兩個(gè)整數(shù)tj, 2;(t, E [1,2), 1 S a;<n, xj 1如果t;= 2) -第j次操作。輸出對(duì)于每個(gè)“1 ?”查詢(xún),在獨(dú)立的行中輸出答案。例子

Examples

input

Copy

7 4
1 1 1 1 1 1 1
1 2
1 3
2 4
2 5
3 6
6 7
1 6
2 3
1 6
1 2

output

Copy

2
3
3

input

Copy

10 14
-160016413 -90133231 -671446275 -314847579 -910548234 121155052 -359359950 83112406 -704889624 145489303
1 6
1 10
10 8
1 4
3 4
2 7
2 5
3 2
9 8
1 4
2 2
2 4
1 4
1 10
2 10
1 9
1 6
2 8
2 10
1 5
1 8
1 1
2 5

output

Copy

-2346335269
-314847579
-476287915
-704889624
121155052
-1360041415
228601709
-2861484545

題解:

純模擬,只能說(shuō)看懂題意就很簡(jiǎn)單

對(duì)于操作1,就是輸出子樹(shù)權(quán)值和,

操作2,說(shuō)的很麻煩,簡(jiǎn)單來(lái)說(shuō)就是

找到這個(gè)節(jié)點(diǎn)x的父節(jié)點(diǎn)f,找到這個(gè)節(jié)點(diǎn)x的子節(jié)點(diǎn)ne(包含最多子節(jié)點(diǎn)的節(jié)點(diǎn),如果最大的有一樣的,找標(biāo)號(hào)最小的)

找到后f與x斷開(kāi),f與ne連邊,ne與x連邊

對(duì)于子樹(shù)權(quán)值和,很好計(jì)算,

關(guān)鍵是如何找到這個(gè)節(jié)點(diǎn)x的子節(jié)點(diǎn)ne(包含最多子節(jié)點(diǎn)的節(jié)點(diǎn),如果最大的有一樣的,找標(biāo)號(hào)最小的)

因此對(duì)于每個(gè)節(jié)點(diǎn),dfs記錄每個(gè)子樹(shù)權(quán)值的同時(shí),并且記錄子樹(shù)大小

我們利用set進(jìn)行存儲(chǔ)每個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn),{-son[x],x}

-son[x],每次可以取出節(jié)點(diǎn)最多的子節(jié)點(diǎn),同時(shí)set保證了下標(biāo)從小到大,每次取首位即可

接下來(lái)就是維護(hù),三個(gè)節(jié)點(diǎn)子樹(shù)權(quán)值,子樹(shù)大小,父節(jié)點(diǎn)(麻煩,但是很容易理解,代碼中均有體現(xiàn))

(如果操作2操作的是葉子結(jié)點(diǎn),記得按題中所說(shuō)的跳過(guò))文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-411858.html

#include <cstdio>
#include <cstring>
#include <algorithm>
#include<iostream>
#include<vector>
#include<set>
#include<map>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
#define int long long
vector<int> p[100050];
int n,m;
int sum[100050];
int son[100060];
int fa[100050];
int a[100050];
set <PII> d[100050];
void dfs(int x,int la)
{
	sum[x] = a[x];
	son[x] = 1;
	for(auto ne:p[x])
	{
		if(ne == la)
		continue;
		dfs(ne,x);
		sum[x] += sum[ne];
		son[x] += son[ne];
		fa[ne] = x;
		d[x].insert({-son[ne],ne});
	}
}
void solve()
{
	cin >> n >> m;
	for(int i = 1;i <= n;i++)
	{
		cin >> a[i]; 
	}
	for(int i = 1;i < n;i++)
	{
		int l,r;
		cin >> l >> r;
		p[l].push_back(r);
		p[r].push_back(l);
	}
	dfs(1,0);
	while(m--)
	{
		int op,x;
		cin >> op >> x;
		if(op == 1)
		{
			cout << sum[x] <<"\n";
		}
		else
		{
			if(son[x] == 1)
			continue;
			int f = fa[x];
			auto it = d[x].begin();
			int ne = (*it).second;
			d[f].erase({-son[x],x});
			sum[x] -= sum[ne];
			son[x] -= son[ne];
			d[x].erase(*it);
			d[ne].insert({-son[x],x});
			fa[ne] = f;
			fa[x] = ne;
			sum[ne] += sum[x];
			son[ne] += son[x];
			d[f].insert({-son[ne],ne});
		}
	}
}

signed main()
{
//	ios::sync_with_stdio(0);
//	cin.tie(0);cout.tie(0);
	int t = 1;
//	cin >> t;
	while(t--)
	{
		solve(); 
	}
}

到了這里,關(guān)于D. Li Hua and Tree(set操作)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • D. Paths on the Tree

    D. Paths on the Tree

    Problem - 1746D - Codeforces 思路:先分析一下題意,根據(jù)第一條性質(zhì),每次只能夠從1開(kāi)始,而第二條性質(zhì)則表明對(duì)于每個(gè)節(jié)點(diǎn)來(lái)說(shuō),經(jīng)過(guò)這個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)的路徑條數(shù)應(yīng)該盡量均衡,最大值與最小值相差不能超過(guò)1,所以我們考慮,如果當(dāng)前要選擇k個(gè)路徑,而當(dāng)前節(jié)點(diǎn)有cnt個(gè)子節(jié)

    2024年02月09日
    瀏覽(18)
  • Codeforces Round 768 (Div. 1) D. Flipping Range(思維題 等價(jià)類(lèi)性質(zhì) dp)

    Codeforces Round 768 (Div. 1) D. Flipping Range(思維題 等價(jià)類(lèi)性質(zhì) dp)

    題目 思路來(lái)源 官方題解 洛谷題解 題解 可操作的最短區(qū)間長(zhǎng)度肯定是gcd,記為g,然后考慮如何dp 考慮g個(gè)等價(jià)類(lèi),每個(gè)等價(jià)類(lèi)i,i+g,i+2*g,... 每次翻轉(zhuǎn)長(zhǎng)度為g的區(qū)間,會(huì)同時(shí)影響到g個(gè)等價(jià)類(lèi)總的翻轉(zhuǎn)的奇偶性, 性質(zhì)一:只有每個(gè)等價(jià)類(lèi)翻的次數(shù)奇偶性相同才合法? 性質(zhì)二:此

    2024年01月19日
    瀏覽(16)
  • Codeforces Round 890 (Div. 2) D. More Wrong(交互題 貪心/啟發(fā)式 補(bǔ)寫(xiě)法)

    Codeforces Round 890 (Div. 2) D. More Wrong(交互題 貪心/啟發(fā)式 補(bǔ)寫(xiě)法)

    題目 t(t=100)組樣例,長(zhǎng)為n(n=2000)的序列 交互題,每次你可以詢(xún)問(wèn)一個(gè)區(qū)間[l,r]的逆序?qū)?shù),代價(jià)是 要在的代價(jià)內(nèi)問(wèn)出最大元素的位置,輸出其位置 思路來(lái)源 neal Codeforces Round 890 (Div. 2) supported by Constructor Institute D (交互+分治) 附加強(qiáng) - 知乎 題解 賽中開(kāi)題順序大失敗沒(méi)看這個(gè)

    2024年02月14日
    瀏覽(15)
  • CF1120 D. Power Tree 巧妙的圖論轉(zhuǎn)化

    傳送門(mén) [前題提要]:無(wú) 題目描述: 考慮對(duì)一個(gè)點(diǎn)的子樹(shù)的所有 葉子節(jié)點(diǎn) 進(jìn)行增減任意值.不難聯(lián)想到對(duì)一個(gè)點(diǎn)的子樹(shù)的 所有節(jié)點(diǎn) 增減任意值的做法.所以考慮使用類(lèi)似于樹(shù)鏈剖分的方式將樹(shù)上修改化為鏈上區(qū)間修改. 考慮記錄一個(gè)點(diǎn)的所有葉子節(jié)點(diǎn),并且按照 d f s dfs df s 序?qū)⑵?/p>

    2024年02月10日
    瀏覽(19)
  • Tree of Thoughts: Deliberate Problem Solving with Large Language Models

    本文是LLM系列的文章,針對(duì)《Tree of Thoughts: Deliberate Problem Solving with Large Language Models》的翻譯。 語(yǔ)言模型越來(lái)越多地被部署用于解決各種任務(wù)中的一般問(wèn)題,但在推理過(guò)程中仍然局限于token級(jí)別的從左到右的決策過(guò)程。這意味著他們可能無(wú)法完成需要探索、戰(zhàn)略前瞻或初始決

    2024年02月11日
    瀏覽(21)
  • 杭電oj Simple Set Problem 雙指針 尺取法 滿(mǎn)注釋版

    杭電oj Simple Set Problem 雙指針 尺取法 滿(mǎn)注釋版

    ????? 題目地址 輸入 輸出 使用快讀,避免使用 Arrays.fill() 按需初始化 避免卡常 ?? 思路

    2024年02月15日
    瀏覽(22)
  • Codeforces Round 911 (Div. 2) C. Anji‘s Binary Tree (DFS + 樹(shù))

    題目 思路: ? ? ? ? dfs樹(shù)的每一條到葉子的路徑, 并計(jì)算路徑中需要修改的個(gè)數(shù), 在這些個(gè)數(shù)中取最小值 注意: ? ? ? ? 本題中的樹(shù)是以每個(gè)結(jié)點(diǎn)的左右孩子是什么的形式給出的, 所以可以不用建樹(shù), 只需保存每個(gè)結(jié)點(diǎn)的左右孩子是什么即可。 代碼:

    2024年01月16日
    瀏覽(49)
  • G. Rudolf and CodeVid-23 codeforces1846G

    Problem - G - Codeforces 題目大意:給出一長(zhǎng)度為n的二進(jìn)制字符串s,和m對(duì)二進(jìn)制字符串e1和e2,,費(fèi)用為d,s和一對(duì)字符串操作后s中是1且e1中也是1的位置會(huì)變成0,s中是0,e2中是1的位置會(huì)變成1,得到新的s,每對(duì)字符串可以操作任意次,問(wèn)能否使s變成全0字符串 1=n=10;1=m=1000;1=d=

    2024年02月13日
    瀏覽(18)
  • Codeforces Round 303 (Div. 2)C. Kefa and Park(DFS、實(shí)現(xiàn))

    Codeforces Round 303 (Div. 2)C. Kefa and Park(DFS、實(shí)現(xiàn))

    C. Kefa and Park 求葉節(jié)點(diǎn)數(shù)量,葉節(jié)點(diǎn)滿(mǎn)足,從根節(jié)點(diǎn)到葉節(jié)點(diǎn)的路徑上最長(zhǎng)連續(xù)1的長(zhǎng)度小于m 這道題目主要是實(shí)現(xiàn),當(dāng)不滿(mǎn)足條件時(shí)直接返回。 到達(dá)葉節(jié)點(diǎn)后統(tǒng)計(jì)答案,用vector存圖的話(huà),無(wú)向圖時(shí),葉節(jié)點(diǎn)的邊只有一條,也就是 g [ i ] . s i z e ( ) = = 1 g[i].size()==1 g [ i ] . s i ze

    2024年02月19日
    瀏覽(23)
  • Codeforces Round 169 (Div. 2)C. Little Girl and Maximum Sum(差分、貪心)

    Codeforces Round 169 (Div. 2)C. Little Girl and Maximum Sum(差分、貪心)

    C. Little Girl and Maximum Sum 給q個(gè)[l,r]將所有這些區(qū)間里面的數(shù)相加和最大。 可以進(jìn)行的操作是任意排列數(shù)組 對(duì)出現(xiàn)的每個(gè)區(qū)間內(nèi)的位置加上1,代表權(quán)值 操作完之后求一遍前綴和,得到每個(gè)位置的權(quán)值 然后貪心的考慮,權(quán)值越大,應(yīng)該分配給該位置的數(shù)越大越好這樣對(duì)答案的貢

    2024年02月21日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包