BZOJ.3052.[WC2013]糖果公園(樹上莫隊 帶修改莫隊)

題目鏈接 BZOJ
當然哪都能交(都比在BZOJ交好),比如UOJ #58

//67376kb   27280ms
//樹上莫隊+帶修改莫隊 模板題 
#include <cmath>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
//#define gc() getchar()
#define MAXIN 400000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=1e5+5,M=1e6+3;int n,m,Enum,H[N],nxt[N<<1],to[N<<1],val[M],W[N],col[N],las[N],tm[M];
int fa[N],dep[N],sz[N],son[N],top[N],Index,in[N],out[N],seq[N<<1];
LL Now,Ans[M];
bool vis[N];
char IN[MAXIN],*SS=IN,*TT=IN;
struct Queries
{int l,r,lca,bl,br,tm,id;bool operator <(const Queries &x)const{if(bl!=x.bl) return bl<x.bl;//能優化15%?if(br!=x.br) return bl&1?br<x.br:br>x.br;return (bl^br)&1?tm<x.tm:tm>x.tm;
//      if(bl==x.bl) return br==x.br?tm<x.tm:br<x.br;
//      return bl<x.bl;}
}q[M];
struct Modify
{int pos,val,bef;
}qm[M];inline int read()
{int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-'0',c=gc());return now;
}
inline void AddEdge(int u,int v)
{to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum;to[++Enum]=u, nxt[Enum]=H[v], H[v]=Enum;
}
inline int LCA(int u,int v)
{while(top[u]!=top[v]) dep[top[u]]>dep[top[v]]?u=fa[top[u]]:v=fa[top[v]];return dep[u]>dep[v]?v:u;
}
void DFS1(int x)
{int mx=0; sz[x]=1;for(int v,i=H[x]; i; i=nxt[i])if((v=to[i])!=fa[x]){fa[v]=x, dep[v]=dep[x]+1, DFS1(v), sz[x]+=sz[v];if(mx<sz[v]) mx=sz[v], son[x]=v;}
}
void DFS2(int x,int tp)
{seq[in[x]=++Index]=x, top[x]=tp;if(son[x]){DFS2(son[x],tp);for(int i=H[x]; i; i=nxt[i])if(to[i]!=fa[x]&&to[i]!=son[x]) DFS2(to[i],to[i]);}seq[out[x]=++Index]=x;
}
void Calc(int p)
{vis[p] ? Now-=1ll*W[tm[col[p]]--]*val[col[p]] : Now+=1ll*W[++tm[col[p]]]*val[col[p]];vis[p]^=1;
}
void Change(int p,int v)
{if(vis[p]) Calc(p), col[p]=v, Calc(p);else col[p]=v;
}int main()
{n=read(), m=read(); int Q=read();for(int i=1; i<=m; ++i) val[i]=read();for(int i=1; i<=n; ++i) W[i]=read();for(int i=1; i<n; ++i) AddEdge(read(),read());for(int i=1; i<=n; ++i) col[i]=las[i]=read();DFS1(1), DFS2(1,1);int qcnt=0, mcnt=0, size=pow(n,2.0/3.0);for(int i=1,x,y,w; i<=Q; ++i)if(!read()) qm[++mcnt]=(Modify){x=read(),y=read(),las[x]},las[x]=y;else{x=read(), y=read();
//          if(x==y) {q[++qcnt].lca=-1, Ans[qcnt]=...; continue;}w=LCA(x,y);if(in[x]>in[y]) std::swap(x,y);if(x==w) q[++qcnt]=(Queries){in[x],in[y],0,in[x]/size,in[y]/size,mcnt,qcnt};else q[++qcnt]=(Queries){out[x],in[y],w/*in[w]*/,out[x]/size,in[y]/size,mcnt,qcnt};}std::sort(q+1,q+1+qcnt);for(int i=1,t=0,l=1,r=0,ql,qr,qt; i<=qcnt; ++i){ql=q[i].l, qr=q[i].r, qt=q[i].tm;while(t<qt) ++t,Change(qm[t].pos,qm[t].val);while(t>qt) Change(qm[t].pos,qm[t].bef),--t;if(ql==qr) {Ans[q[i].id]=1ll*val[col[seq[q[i].l]]]*W[1]; continue;}while(l<ql) Calc(seq[l++]);while(l>ql) Calc(seq[--l]);while(r<qr) Calc(seq[++r]);while(r>qr) Calc(seq[r--]);if(q[i].lca) Calc(q[i].lca);//Calc(seq[in[lca]]) = Calc(lca)Ans[q[i].id]=Now;if(q[i].lca) Calc(q[i].lca);}for(int i=1; i<=qcnt; ++i) printf("%lld\n",Ans[i]);return 0;
}

轉載于:https://www.cnblogs.com/SovietPower/p/9383233.html

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

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

相關文章

Jquery Datatable的使用樣例(ssm+bootstrsp框架下)服務器端分頁

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 效果&#xff1a; 我這個表格數據 比較少沒有第2頁 有多例多頁的效果&#xff08;帶滾動條和翻頁&#xff09;&#xff1a; 1. jsp頁面…

Hadoop集群(四) Hadoop升級

Hadoop前面安裝的集群是2.6版本&#xff0c;現在升級到2.7版本。 注意&#xff0c;這個集群上有運行Hbase&#xff0c;所以&#xff0c;升級前后&#xff0c;需要啟停Hbase。 更多安裝步驟&#xff0c;請參考&#xff1a; Hadoop集群(一) Zookeeper搭建 Hadoop集群(二) HDFS搭建…

學成在線--24.課程圖片管理(保存課程圖片)

文章目錄一. 需求分析二. 服務端開發1. 模型類2. API3. Dao4. Service5. Controller三. 前端開發1. API2. 頁面1). 添加上傳成功的鉤子 :on-success"handleSuccess"2). 在鉤子方法 中保存課程圖片信息一. 需求分析 圖片上傳到文件系統后&#xff0c;其它子系統如果想…

從任意網頁上摘取酷炫Jquery效果為自己使用的方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 用的chrome 瀏覽器 2. 隨意百度一個漂亮的jquery效果 比如我找到一個可以旋轉的多面體效果 3. 再F12選 Resources到如下界面&…

shell基礎05 處理用戶輸入

1. 命令行參數------類似javac 參數1 參數2 類似Java中編譯的javac parm1....。在shell中&#xff0c;參數與參數之間用空格隔開。采用位置參數來識別對應的參數值&#xff1a;$0是程序名&#xff0c;$1是第一個參數&#xff0c;以此類推&#xff0c;知道第9個參數$9。對于大…

OpenCV 2.4.0 正式版發布,開源計算機視覺庫

OpenCV 于近日發布了 2.4.0 正式版。 OpenCV是一個基于BSD許可證授權發行的跨平臺開源計算機視覺庫&#xff0c;可以運行在Linux、Windows和Mac OS操作系統上。作為一款簡潔而且高效的視覺庫&#xff0c;OpenCV由一系列 C 函數和少量 C 類構成&#xff0c;同時提供了Python、Ru…

最小編輯代價-golang

題目&#xff1a; 給定兩個字符串str1和str2&#xff0c;在給定三個整數ic,dc和rc,分別代表插入、刪除和替換一個 字符&#xff0c;返回將str1編輯成str2的最小代價。 解題方法&#xff1a; 動態規劃。首先生成大小為(M1)X(N1)的矩陣dp。 假設str1"avb12cd3", str2&q…

You can't specify target table 'TS_AUTH_ADMIN' for update in FROM clause記錄

&#xff11;. 報錯&#xff1a;You cant specify target table TS_AUTH_ADMIN for update in FROM clause&#xff0c; 百度查到說是&#xff0c;不能在同一語句中先select出同一表中的某些值,再update這個表 。 我原本的sql是&#xff1a;&#xff08;刪除角色的時候&#…

study of javaserver faces lifecycle

JavaServer Faces應用程序的生命周期在客戶端為頁面發出HTTP請求時開始&#xff0c;并在服務器響應該頁面并轉換為HTML時結束。 通常將JSF的生命周期分為兩個階段&#xff1a; #執行階段 #渲染階段 1.執行階段 JavaServer Faces應用程序生命周期執行階段包含以下子階段&#xf…

從開源軟件開發中體會到的心得

Mitchell Hashimoto 是一名開源軟件工程師。由他托管到 GitHub 上的 開源項目 Vagrant&#xff0c;是一個用于創建和部署虛擬化開發環境的工具。近日&#xff0c;Mitchell撰文講述了在開發 Vagrant 的過程中學到的有關開源軟件開發的一些心得。 以下為原文文章&#xff1a; 把 …

學成在線--25.課程圖片管理(圖片查詢)

文章目錄一. 需求分析二. API三. 服務端開發1. Dao2. Service3. Controller四. 前端開發1. API方法2. 頁面一. 需求分析 課程圖片上傳成功&#xff0c;再次進入課程上傳頁面應該顯示出來已上傳的圖片。 二. API 在課程管理服務定義查詢方法 文件位置&#xff1a;xcEduServic…

redux源碼解讀

背景 因為就得去實習了。所以打算開始補補坑。比如自己閱讀源碼的計劃。所以今天來聊聊redux的源碼。后續會有redux-thunk和react-redux的源碼閱讀。搞定這些的話&#xff0c;就開始閱讀一個node的庫的源碼了&#xff0c;比如eventproxy和anywhere。 開始 總覽, redux的文件結構…

sql語句update中多個case/when的寫法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 又如&#xff1a; update xxxx_xxxx set xxx_typeCASE WHEN xxx_type 0 THENYXLX-0WHEN xxx_type 1 THENYXLX-1WHEN xxx_type 2 THE…

Redis-ha(sentinel)搭建

服務器描述&#xff1a;本次搭建是用來測試&#xff0c;所以是在一臺服務器上搭建三個redis服務&#xff08;一主兩從&#xff09; 服務角色 端口 Redis.conf名稱 sentinel配置文件名稱 sentinel端口 redis日志路徑 sentinel路勁 主(master) 6379 redis.conf sentine…

學成在線--26.課程圖片管理(圖片刪除)

文章目錄一. 需求分析二. API三. 服務端開發1. Dao2. Service3. Controller四. 前端開發1. API方法2. 頁面1.before-remove鉤子方法2.handleRemove鉤子方法一. 需求分析 課程圖片上傳成功后&#xff0c;可以重新上傳&#xff0c;方法是先刪除現有圖片再上傳新圖片&#xff1b;…

警惕開源代碼庫中的安全隱患

最近的一項研究發現&#xff0c; 在調查的31個流行庫&#xff08;框架&#xff09;的1261個版本中&#xff0c;超過三分之一存在已知的安全漏洞&#xff0c;大約四分之一的下載文件已經被污染。 該項研究由Aspect Security和Sonatype發起。Aspect Security是一家評估軟件安全漏…

jsp注釋

jsp注釋 <%--注釋內容--%> html注釋 <!--注釋內容-->

線程間的協作(3)——管道輸入/輸出流

2019獨角獸企業重金招聘Python工程師標準>>> 1.管道輸入/輸出流類 分為兩類&#xff0c;字節流管道類&#xff08;PipedInputStream/PipedOutputStream&#xff09;和字符流管道類&#xff08;PipedReader/ PipedWriter&#xff09;。這兩個IO流實現了可以在不同的任…