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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解题: SDOI 2011 染色

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解题: SDOI 2011 染色 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題面

強行把序列問題通過樹剖套在樹上。。。算了算是回顧了一下樹剖的思想=。=

每次樹上跳的時候注意跳的同時維護當前拼出來的左右兩條鏈的靠上的端點,然后拼起來的時候討論一下拼接點,最后一下左右兩邊的端點都要考慮

1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int N=100005; 6 struct a 7 { 8 int cnt; 9 int lc,rc; 10 }; 11 int num[N],nmb[N],val[4*N],lcol[4*N],rcol[4*N],laz[4*N]; 12 int siz[N],dep[N],anc[N],imp[N],top[N],dfn[N]; 13 int p[N],noww[2*N],goal[2*N]; 14 int n,m,t1,t2,t3,cnt,tot; 15 char rd[2]; 16 void link(int f,int t) 17 { 18 noww[++cnt]=p[f]; 19 goal[cnt]=t,p[f]=cnt; 20 } 21 void DFS(int nde,int fth,int dth) 22 { 23 int tmp=0; 24 siz[nde]=1,anc[nde]=fth,dep[nde]=dth; 25 for(int i=p[nde];i;i=noww[i]) 26 if(goal[i]!=fth) 27 { 28 DFS(goal[i],nde,dth+1); 29 siz[nde]+=siz[goal[i]]; 30 if(siz[goal[i]]>tmp) 31 tmp=siz[goal[i]],imp[nde]=goal[i]; 32 } 33 } 34 void MARK(int nde,int tpp) 35 { 36 dfn[nde]=++tot,nmb[tot]=num[nde],top[nde]=tpp; 37 if(imp[nde]) 38 { 39 MARK(imp[nde],tpp); 40 for(int i=p[nde];i;i=noww[i]) 41 if(goal[i]!=anc[nde]&&goal[i]!=imp[nde]) 42 MARK(goal[i],goal[i]); 43 } 44 } 45 void pushup(int nde) 46 { 47 int ls=2*nde,rs=2*nde+1; 48 lcol[nde]=lcol[ls],rcol[nde]=rcol[rs]; 49 val[nde]=val[ls]+val[rs]-(rcol[ls]==lcol[rs]); 50 } 51 void create(int nde,int l,int r) 52 { 53 if(l==r) 54 val[nde]=1,lcol[nde]=rcol[nde]=nmb[l]; 55 else 56 { 57 int mid=(l+r)/2,ls=2*nde,rs=2*nde+1; 58 create(ls,l,mid),create(rs,mid+1,r); 59 pushup(nde); 60 } 61 } 62 void release(int nde,int l,int r) 63 { 64 if(laz[nde]) 65 { 66 int ls=2*nde,rs=2*nde+1; 67 laz[ls]=lcol[ls]=rcol[ls]=laz[nde]; 68 laz[rs]=lcol[rs]=rcol[rs]=laz[nde]; 69 val[ls]=val[rs]=1; laz[nde]=0; 70 } 71 } 72 void change(int nde,int l,int r,int nl,int nr,int task) 73 { 74 if(l>nr||r<nl) 75 return ; 76 else if(l>=nl&&r<=nr) 77 val[nde]=1,lcol[nde]=rcol[nde]=laz[nde]=task; 78 else 79 { 80 int mid=(l+r)/2,ls=2*nde,rs=2*nde+1; release(nde,l,r); 81 change(ls,l,mid,nl,nr,task),change(rs,mid+1,r,nl,nr,task); 82 pushup(nde); 83 } 84 } 85 a query(int nde,int l,int r,int nl,int nr) 86 { 87 if(l>=nl&&r<=nr) 88 return (a){val[nde],lcol[nde],rcol[nde]}; 89 else 90 { 91 int mid=(l+r)/2,ls=2*nde,rs=2*nde+1; release(nde,l,r); 92 if(nr<=mid) return query(ls,l,mid,nl,nr); 93 if(nl>mid) return query(rs,mid+1,r,nl,nr); 94 a r1=query(ls,l,mid,nl,nr),r2=query(rs,mid+1,r,nl,nr),ret; 95 ret.lc=r1.lc,ret.rc=r2.rc,ret.cnt=r1.cnt+r2.cnt-(r1.rc==r2.lc); 96 return ret; 97 } 98 } 99 void path_change(int x,int y,int v) 100 { 101 while(top[x]!=top[y]) 102 { 103 if(dep[top[x]]<dep[top[y]]) swap(x,y); 104 change(1,1,n,dfn[top[x]],dfn[x],v); x=anc[top[x]]; 105 } 106 if(dep[x]>dep[y]) swap(x,y); 107 change(1,1,n,dfn[x],dfn[y],v); return ; 108 } 109 int path_query(int x,int y) 110 { 111 int rt=0,ll=-1,rr=-1; 112 while(top[x]!=top[y]) 113 { 114 if(dep[top[x]]<dep[top[y]]) swap(x,y),swap(ll,rr); 115 a ret=query(1,1,n,dfn[top[x]],dfn[x]); x=anc[top[x]]; 116 rt+=ret.cnt-(ll==ret.rc); ll=ret.lc; 117 } 118 if(dep[x]>dep[y]) swap(x,y),swap(ll,rr); 119 a ret=query(1,1,n,dfn[x],dfn[y]); rt+=ret.cnt-(ll==ret.lc)-(rr==ret.rc); 120 return rt; 121 } 122 int main () 123 { 124 scanf("%d%d",&n,&m); 125 for(int i=1;i<=n;i++) 126 scanf("%d",&num[i]); 127 for(int i=1;i<n;i++) 128 scanf("%d%d",&t1,&t2),link(t1,t2),link(t2,t1); 129 DFS(1,0,1); MARK(1,1); create(1,1,n); 130 while(m--) 131 { 132 scanf("%s",rd); 133 if(rd[0]=='C') 134 scanf("%d%d%d",&t1,&t2,&t3),path_change(t1,t2,t3); 135 else 136 scanf("%d%d",&t1,&t2),printf("%d\n",path_query(t1,t2)); 137 } 138 return 0; 139 } View Code

?

轉載于:https://www.cnblogs.com/ydnhaha/p/9743416.html

總結

以上是生活随笔為你收集整理的解题: SDOI 2011 染色的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 涩涩视频免费在线观看 | 少妇av片 | 亚洲狠狠婷婷综合久久久久图片 | 97久久精品人人澡人人爽 | 国产麻豆剧果冻传媒白晶晶 | 日韩精品一区二区三区丰满 | 国产午夜精品一区二区理论影院 | 日本黄页网站免费大全 | 九九综合九九综合 | 成人午夜高清 | 中文字幕有码在线观看 | 制服丝袜成人动漫 | 中文字幕在线播放日韩 | 污视频网站入口 | 日本免费精品视频 | 日本福利社 | 久久99日 | 男人与雌性宠物交啪啪 | 国产绿帽刺激高潮对白 | 亚洲一区二区三区蜜桃 | 成人性生交大片免费卡看 | 69精品丰满人妻无码视频a片 | 国产精品久久久久久久毛片 | 亚洲av成人无码久久精品老人 | 免费av网址在线 | 欧美日本在线看 | 日本人视频69式jzzij | 欧美精品三级 | 国产午夜福利100集发布 | 麻豆自拍偷拍 | 欧美日韩国产在线观看 | av久久久 | 欧美一级黄色录像 | 精品探花 | 97伊人网| 成人免费影片 | 久久亚洲免费视频 | 青青草这里只有精品 | 国产成人三级在线 | jjzz日本女人| 95在线视频| 欧美三级韩国三级日本三斤在线观看 | 中文字幕无码人妻少妇免费 | 韩国中文字幕在线观看 | 成人亚洲精品久久久久软件 | 午夜影院试看 | 中文国产| 不卡视频在线 | 叼嘿视频91 | 波多野结衣电车 | 天天做天天躁天天躁 | 中文字幕亚洲欧美日韩 | 精品国产鲁一鲁一区二区张丽 | 国产成人综合亚洲 | 国产一级在线 | 色xxxxx| 婷婷伊人五月天 | 爆乳熟妇一区二区三区霸乳 | 一本一道久久a久久精品综合 | 国产精品成人99一区无码 | 亚洲不卡在线 | 天天操天天做 | 日韩一区二区三区四区五区六区 | 91免费高清视频 | 亚洲av无码一区二区三区人妖 | 超碰在线免费公开 | 日韩av网站在线 | 91尤物视频 | 日韩一区二区三区电影 | 99视频在线精品 | 日日av | xxxx视频在线观看 | 三级网站免费观看 | 一级黄色在线观看 | 资源av| 欧美成人性生活片 | 理论片琪琪午夜电影 | 色综合激情 | 91在线一区二区 | 国产中文欧美日韩在线 | 福利片在线观看 | 免费久久精品视频 | 毛片毛片毛片毛片 | 中国新婚夫妻性猛交 | 激情图片在线观看 | 潘金莲一级淫片a.aaaaa播放 | 男生操女生免费网站 | 在线观看日韩一区 | 国产绳艺sm调教室论坛 | 黄色av网页 | 久久无码精品丰满人妻 | 男女av网站 | 亚洲毛片在线 | 老王66福利网 | 黄瓜视频色版 | 怡红院成永久免费人全部视频 | 一区二区视频在线免费观看 | 久久尤物| 三级免费网站 |