BZOJ 4551樹題解

好吧,洛谷的數據比較水暴力就可以過。。。。(而且跑到飛快)

不過(BZ水不過去)還是講講正規的做法。

其實一眼可以看出可以樹剖,但是,碼起來有點麻煩。

其實有一種更簡單的離線做法。

我們很容易聯想到并查集,利用并查集來維護各個點的最近的標記的祖先,但是加入標記后會產生分離的操作,這對并查集來說不好操作

所以我們先將所有的詢問讀入,將所有的標記都打上去。

從后往前處理。如果有一個點的標記變為了0,就將該點與它的父親合并。

不知為何,在luogu上跑的比暴力要慢一點。。。。

# include<iostream>
# include<cstdio>
# include<cmath>
# include<cstring>
# include<algorithm>
using namespace std;
const int mn = 100005;
int n,m;
int c[mn],a[mn],fa[mn],ans[mn];
char opt[mn];
struct edge{int next,to;}e[mn*2];
int head[mn],edge_max;
inline void add_edge(int x,int y)
{e[++edge_max]=(edge){head[x],y};head[x]=edge_max;
}
int f[mn];//并查集的fa數組
int find(int x)
{return f[x]==x?x:f[x]=find(f[x]);
}
void dfs(int x)
{f[x]=c[x]?x:fa[x];for(int i=head[x];i;i=e[i].next){int y=e[i].to;if (y!=fa[x]) fa[y]=x,dfs(y);}
}
int main()
{int x,y;scanf("%d%d",&n,&m);for(int i=1;i<n;i++){scanf("%d%d",&x,&y);add_edge(x,y);add_edge(y,x);}c[1]=1;for(int i=1;i<=m;i++){scanf(" %c%d",&opt[i],&a[i]);if (opt[i]=='C') c[a[i]]++;}dfs(1);for(int i=m;i>=1;i--){if (opt[i]=='C'){c[a[i]]--;if(!c[a[i]])f[a[i]]=fa[a[i]];}else ans[i]=find(a[i]);}for(int i=1;i<=m;i++){if(ans[i])printf("%d\n",ans[i]);}return 0;
}

  

轉載于:https://www.cnblogs.com/logeadd/p/8685974.html

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

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

相關文章

es6 --- 使用Symbol保護私有變量

定義一個人物類 假設其屬性有姓名和性別我們希望,性別在聲明后就固定不變 傳統方法 var Person (function(){var _gender ;function P(name, gender){this.name name;_gender gender;}P.prototype.getGender function(){return _gender;}return P; })();var p1 new Pe…

組合數

long long factorial(int n) {long long m 1;for(int i1;i<n;i)m*i;return m; } long long C(int n,int m) {return factorial(n)/(factorial(m)*factorial(n-m));//可能會溢出 } 正解&#xff1a; long long C(int n,int m) {if(m<n-m) m n-m;long long ans 1;for(in…

Mysql中的聯合索引、前綴索引、覆蓋索引

Mysql中的聯合索引、前綴索引、覆蓋索引 索引 索引是一種特殊的文件&#xff0c;它們包含著對數據表里所有記錄的引用指針。更通俗的說&#xff0c;數據庫索引好比是一本書前面的目錄&#xff0c;能加快數據庫的查詢速度。 聯合索引 又名復合索引&#xff0c;由兩個或多個列…

LVM邏輯卷管理

什么是邏輯卷&#xff1f;因為可以將文件系統像卷一樣伸長或縮短之故。 LVM做法&#xff0c;將幾個物理分區或磁盤&#xff0c;通過軟件組合成為一塊看起來是獨立的大磁盤&#xff08;VG&#xff09;&#xff0c;然后將這塊大磁盤再經過分成可使用分區&#xff08;LV&#xff0…

es6 --- 自制迭代器

對象 對象如下 const obj {left: 100,top: 200 }不可迭代 for(let attr of obj){console.log(attr); }迭代規則 可迭代,所具有的屬性[Symbol.iterator] 需要自己給obj添加迭代規則 obj[Symbol.iterator] () >{// 獲取obj的所有鍵let keys Object.keys(obj);let len …

軟件工程的實踐項目課程的自我目標

對實踐項目完成后學習到的能力的預期&#xff1a;這算是自己第一次參加的團隊合作的軟件實踐吧&#xff0c;以前自己搞的小“玩意”&#xff0c;實難登大雅之堂&#xff0c;期待實踐項目后--->1、自己的代碼能力能夠有較明顯的提高&#xff0c;代碼更加規范。 2、提升團隊合…

[Shell] swoole_timer_tick 與 crontab 實現定時任務和監控

手動完成 "任務" 和 "監控" 主要有下面三步&#xff1a; 1. mission_cron.php&#xff08;定時自動任務腳本&#xff09;&#xff1a; <?php /*** 自動任務 定時器 (5s 執行).** swoole_timer_tick 解決秒級定時&#xff1b;* 如需調整&#xff0c;注意…

關于項目調研

一、檸檬時代app 1、作品內容&#xff1a; 該作品主要為每一所高校的大學生量身定制的手機生活助手&#xff0c;由您自主運營的校園手機客戶端。開放的自定義平臺&#xff0c;匯聚本校周邊所有生活服務、外賣商家、娛樂休閑、新鮮事兒、知名社團、周邊商鋪、校園達人等欄目。 …

html 標簽

html概述 超文本標記語言&#xff08;英語&#xff1a;HyperText Markup Language&#xff0c;簡稱&#xff1a;HTML&#xff09;是一種用于創建網頁的標準標記語言。HTML是一種基礎技術&#xff0c;常與CSS、JavaScript一起被眾多網站用于設計令人賞心悅目的網頁、網頁應用程序…

es6 --- forEach的實現

forEach的第一個參數 接收回調函數 let a [a, b, c]; a.forEach((v, k ,s)>{console.log(v, k ,s);console.log(this); })v: valuek: keys: 代表數組a本身this指向當前函數執行所在的作用域,即window forEach的第二個參數. forEach第1個參數用于接收回調函數,第2個參數…

java Calendar

1.1 Calendar類概念 Calendar是日歷類&#xff0c;在Date后出現&#xff0c;替換掉了許多Date的方法。該類將所有可能用到的時間信息封裝為靜態成員變量&#xff0c;方便獲取。 Calendar為抽象類&#xff0c;由于語言敏感性&#xff0c;Calendar類在創建對象時并非直接創建&…

結對項目之需求分析與原型設計

結對項目之需求分析與原型設計 031402317 李佳愷 031402511 黃家俊 這是我們兩個人第一次合作&#xff0c;雖然結對是棟哥幫我們分配的&#xff0c;并且一開始我們就認識&#xff0c;但是也很開心有這個機會能一起合作完成任務。 初步分工我負責隨筆&#xff0c;家俊負責原型設…

javaEE項目部署方式

1、手動部署 2、自動化部署 “自動化”的具體體現&#xff1a;向版本庫提交新的代碼后&#xff0c;應運服務器上自動部署 轉載于:https://www.cnblogs.com/zyc-blogs/p/9674606.html

vue --- 2.0數據的響應式的一種實現

初識: 實際上是通過Object.defineProperty()方法來實現的talk is cheap, show your code let obj {}; Object.defineProperty(obj, name, {get(){return document.querySelector(#name).innerHTML;},set(newVal){document.querySelector(#name).innerHTML val;} })// 注1: …

心得開始之路

本人是大四實習狗&#xff0c;現在最大的問題是什么&#xff1f; 一&#xff1a;實力不夠 二&#xff1a;人又懶 開始以為就做做運維&#xff0c;學學服務器就可以了&#xff0c;但是現在才發現&#xff0c;嗯&#xff0c;不會開發的運維什么都不算。 現在開始學習Python自動運…

結對編程作業——畢設導師智能匹配

結對編程作業——畢設導師智能匹配 031402317 李佳愷031402511 黃家俊 問題描述及要求 輸入30個老師&#xff08;包含帶學生數的要求的上限&#xff0c;單個數值&#xff0c;在[0,8]內&#xff09;&#xff0c;100個學生&#xff08;包含績點信息&#xff09;&#xff0c;每…

內置函數二

內置函數: 1.lambda 匿名函數 lambda 參數:返回值 例    resultlambda x,y:xy sresult(x3,y4) print(s) 2.sorted 排序 sorted(iterable, keyfunc, reverseTurn/False) 例    lst [1, 8, 18, 19, 97, 12, 3] lst.sort() lst自帶的排序功能  l2 sorted(lst) 排序…

vue --- 2.0響應式補充

補充: 數組的響應式 // 對數組的方法進行重寫 // 1. 不能影響本來的方法 // 2. 調用的時候可以找到它 let odlArrayPrototype Array.prototype; let proto Object.create(odlArrayPrototype); // 繼承 [push,shift,unshift].forEach(method >{proto[method] function(){…

OptaPlanner - 把example運行起來(運行并淺析Cloud balancing)

經過上面篇長篇大論的理論之后&#xff0c;在開始講解Optaplanner相關基本概念及用法之前&#xff0c;我們先把他們提供的示例運行起來&#xff0c;好先讓大家看看它是如何工作的。OptaPlanner的優點不僅僅是提供詳細豐富的文檔 &#xff0c;還為各種應用場景提供豐富的示例&am…