日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

bzoj 4551[Tjoi2016Heoi2016]树

發(fā)布時(shí)間:2024/7/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj 4551[Tjoi2016Heoi2016]树 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  這題可以用并查集做,一開始統(tǒng)計(jì)一下記錄每個點(diǎn)被標(biāo)記了幾次,除了被標(biāo)記過的點(diǎn)外,其他節(jié)點(diǎn)都與其父親所在集合合并,然后倒著做,做的時(shí)候如果有節(jié)點(diǎn)標(biāo)記次數(shù)變?yōu)榱?,則將其與其父親合并。

  代碼

1 #include<cstdio> 2 #include<queue> 3 #include<cstring> 4 #include<algorithm> 5 #define N 500100 6 using namespace std; 7 typedef long long ll; 8 int n,m,i,a,b,dp,p[N],pre[N],tt[N]; 9 int F[N],v[N],sum[N],f[N],ans[N],tot; 10 char typ[N]; 11 void link(int x,int y) 12 { 13 dp++;pre[dp]=p[x];p[x]=dp;tt[dp]=y; 14 } 15 void dfs(int x,int fa) 16 { 17 int i=p[x]; 18 F[x]=fa; 19 while (i) 20 { 21 if (tt[i]!=fa) 22 dfs(tt[i],x); 23 i=pre[i]; 24 } 25 } 26 int gf(int x) 27 { 28 int p=x,t; 29 while (p!=f[p]) p=f[p]; 30 while (x!=p) 31 { 32 t=f[x];f[x]=p;x=t; 33 } 34 return p; 35 } 36 int main() 37 { 38 scanf("%d%d",&n,&m); 39 for (i=1;i<n;i++) 40 { 41 scanf("%d%d",&a,&b); 42 link(a,b);link(b,a); 43 } 44 dfs(1,0); 45 sum[1]=1; 46 for (i=1;i<=m;i++) 47 { 48 scanf(" %c%d",&typ[i],&v[i]); 49 if (typ[i]=='C') 50 sum[v[i]]++; 51 } 52 for (i=1;i<=n;i++) f[i]=i; 53 for (i=1;i<=n;i++) if (!sum[i]) f[gf(i)]=gf(F[i]); 54 for (i=m;i>=1;i--) 55 { 56 if (typ[i]=='Q') 57 { 58 tot++;ans[tot]=gf(v[i]); 59 } 60 else 61 { 62 sum[v[i]]--; 63 if (sum[v[i]]==0) f[gf(v[i])]=gf(F[v[i]]); 64 } 65 } 66 for (i=tot;i>=1;i--) 67 printf("%d\n",ans[i]); 68 69 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/fzmh/p/5444958.html

總結(jié)

以上是生活随笔為你收集整理的bzoj 4551[Tjoi2016Heoi2016]树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。