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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

JZOJ 5982. 【WC2019模拟12.27】路径排序

發(fā)布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 5982. 【WC2019模拟12.27】路径排序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Description

Input

Output

Sample Input

輸入1:

5 3 1
1 4
4 2
1 5
4 3
1 3
1 4
2 4
3 2

輸入2:

10 5 4
10 3
6 9
6 3
6 8
9 5
1 8
6 4
7 3
6 2
1 10
6 9
6 8
4 5
1 9
1 5
5 2
1 3
3 2

Sample Output

輸出1:

3 1 2

輸出2:

1 5 3 4 2

Data Constraint

Solution

  • 這題我打的是二維線段樹(樹上每個點(diǎn)代表一個矩形,將長割一半作為兩個子節(jié)點(diǎn))。

  • 每條路徑 (x,y)(x,y)(x,y) 加入二維線段樹的位置 (dfn[x],dfn[y])(dfn[x],dfn[y])(dfn[x],dfn[y]) 上,這里要保證 dfn[x]&lt;dfn[y]dfn[x]&lt;dfn[y]dfn[x]<dfn[y]

  • 那么我們要查詢每條路徑被哪些路徑包含,就相當(dāng)于在線段樹上查詢一個或兩個矩形。

  • 注意查詢的時候也要保證矩形的左下角 (x,y)(x,y)(x,y) 滿足 x&lt;yx&lt;yx<y ,這樣避免了很多討論。

  • 線段樹優(yōu)化連邊后跑拓?fù)渑判蚣纯伞?/p>

  • 時間復(fù)雜度 O(nlog2n)O(n\ log^2n)O(n?log2n)

Code

#include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<cctype> using namespace std; const int N=1e5+5,M=20; struct data {int l,r; }f[N*M+N]; int tot,cnt,qx,qy,qxx,qyy,qz,rt; int first[N*M],nex[N*M*M/2],en[N*M*M/2],d[N*M]; int dfn[N],size[N],fa[N][17],dep[N]; int a[N],b[N],c[N],q[N*M]; inline int read() {int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();return w?-X:X; } void write(int x) {if(x>9) write(x/10);putchar(x%10+'0'); } inline void insert(int x,int y) {nex[++tot]=first[x];first[x]=tot;en[tot]=y; } inline void insert1(int x,int y) {nex[++tot]=first[x];first[x]=tot;en[tot]=y;d[y]++; } void dfs(int x) {dfn[x]=++tot;size[x]=1;dep[x]=dep[fa[x][0]]+1;for(int i=first[x];i;i=nex[i])if(en[i]^fa[x][0]){fa[en[i]][0]=x;dfs(en[i]);size[x]+=size[en[i]];} } void change(int &v,int pre,int xl,int xr,int yl,int yr) {if(!v){if(xl==xr && yl==yr) v=qz; else v=++cnt;if(pre) insert1(v,pre);}if(xl==xr && yl==yr) return;if(xr-xl>yr-yl){int mid=xl+xr>>1;if(qx<=mid) change(f[v].l,v,xl,mid,yl,yr); elsechange(f[v].r,v,mid+1,xr,yl,yr);}else{int mid=yl+yr>>1;if(qy<=mid) change(f[v].l,v,xl,xr,yl,mid); elsechange(f[v].r,v,xl,xr,mid+1,yr);} } void find(int v,int xl,int xr,int yl,int yr) {if(!v) return;if(qx<=xl && xr<=qy)if(qxx<=yl && yr<=qyy){if(qz^v) insert1(v,qz);return;}if(xr-xl>yr-yl){int mid=xl+xr>>1;if(qx<=mid) find(f[v].l,xl,mid,yl,yr);if(qy>mid) find(f[v].r,mid+1,xr,yl,yr);}else{int mid=yl+yr>>1;if(qxx<=mid) find(f[v].l,xl,xr,yl,mid);if(qyy>mid) find(f[v].r,xl,xr,mid+1,yr);} } inline int lca(int x,int y) {for(int i=log2(dep[x]);i>=0;i--)if(dep[fa[x][i]]>=dep[y]) x=fa[x][i];if(x==y) return x;for(int i=log2(dep[x]);i>=0;i--)if(fa[x][i]^fa[y][i]) x=fa[x][i],y=fa[y][i];return fa[x][0]; } int main() {freopen("stier.in","r",stdin);freopen("stier.out","w",stdout);int n=read(),m=read(),k=read();for(int i=1;i<n;i++){int x=read(),y=read();insert(x,y);insert(y,x);}tot=0;dfs(1);for(int j=1;j<17;j++)for(int i=1;i<=n;i++)fa[i][j]=fa[fa[i][j-1]][j-1];tot=0;memset(first,0,sizeof(first));cnt=m;for(int i=1;i<=m;i++){a[i]=read(),b[i]=read();if(dep[a[i]]<dep[b[i]]) swap(a[i],b[i]);c[i]=lca(a[i],b[i]);qx=dfn[a[i]];qy=dfn[b[i]];if(qx>qy) swap(qx,qy);qz=i;change(rt,0,1,n,1,n);}for(int i=1;i<=k;i++){int x=read(),y=read();insert1(x,y);}for(int i=1;i<=m;i++){qz=i;if(c[i]==b[i]){int pos=a[i];for(int j=log2(dep[pos]);j>=0;j--)if(dep[fa[pos][j]]>dep[b[i]]) pos=fa[pos][j];qx=dfn[a[i]];qy=dfn[a[i]]+size[a[i]]-1;qxx=1;qyy=dfn[b[i]]-1;if(qx>qxx) swap(qx,qxx),swap(qy,qyy);if(qx<=qy && qxx<=qyy) find(rt,1,n,1,n);qx=dfn[a[i]]+1;qy=dfn[a[i]]+size[a[i]]-1;qxx=1;qyy=dfn[pos]-1;if(qx>qxx) swap(qx,qxx),swap(qy,qyy);if(qx<=qy && qxx<=qyy) find(rt,1,n,1,n);qx=dfn[a[i]];qy=dfn[a[i]]+size[a[i]]-1;qxx=dfn[b[i]]+1;qyy=dfn[pos]-1;if(qx>qxx) swap(qx,qxx),swap(qy,qyy);if(qx<=qy && qxx<=qyy) find(rt,1,n,1,n);qx=dfn[a[i]];qy=dfn[a[i]]+size[a[i]]-1;qxx=dfn[pos]+size[pos];qyy=n;if(qx>qxx) swap(qx,qxx),swap(qy,qyy);if(qx<=qy && qxx<=qyy) find(rt,1,n,1,n);}else{if(dfn[a[i]]>dfn[b[i]]) swap(a[i],b[i]);qx=dfn[a[i]]+1;qy=dfn[a[i]]+size[a[i]]-1;qxx=dfn[b[i]];qyy=dfn[b[i]]+size[b[i]]-1;if(qx<=qy) find(rt,1,n,1,n);qx=dfn[a[i]];qy=dfn[a[i]]+size[a[i]]-1;qxx=dfn[b[i]]+1;qyy=dfn[b[i]]+size[b[i]]-1;if(qxx<=qyy) find(rt,1,n,1,n);}}int l=0,r=0;for(int i=1;i<=cnt;i++)if(!d[i]) q[++r]=i;while(l<r){int x=q[++l];if(x<=m) write(x),putchar(' ');for(int i=first[x];i;i=nex[i])if(!--d[en[i]]) q[++r]=en[i];}return 0; }

總結(jié)

以上是生活随笔為你收集整理的JZOJ 5982. 【WC2019模拟12.27】路径排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 韩国美女一区 | 一区二区三区日韩欧美 | 3级黄色片| 欧美色涩 | 久久国产毛片 | 男男成人高潮片免费网站 | 黄网免费在线观看 | 中出一区 | 美女屁股无遮挡 | 日本一级黄色 | 国产精品视频在线免费观看 | 国产香蕉一区 | 91精品久久久久久久久久入口 | 最近中文字幕一区二区 | 成人av播放| 99热思思 | 婷婷深爱五月 | 国产成人av无码精品 | 夜夜嗨一区二区三区 | 97精品国产97久久久久久春色 | 超碰不卡 | 亚洲精品.www | 久久久999国产精品 天堂av中文在线 | 日日躁夜夜躁狠狠躁 | 男人操女人的网站 | 久久aⅴ乱码一区二区三区 亚洲成人18 | 国产一级二级三级精品 | 亚洲先锋影音 | 超碰在线免费97 | 久久久久久久久久久久国产 | 巨胸挤奶视频www网站 | 国产精品自拍99 | 亚洲 欧美 精品 | 古代黄色一级片 | 欧美黑人精品 | 两根大肉大捧一进一出好爽视频 | 污视频大全 | 国产免费无码一区二区视频 | 关之琳三级全黄做爰在线观看 | 肉性天堂 | 成人免费网站 | exo妈妈mv在线播放高清免费 | 日日撸视频 | 女人十八岁毛片 | 孕妇疯狂做爰xxxⅹ 国产精品乱码久久久久久 99久久久成人国产精品 | 91精品免费观看 | 精品国自产在线观看 | 在线精品一区二区三区 | 亚洲欧美一区二区三区在线 | 色久婷婷| 狂躁美女大bbbbbb黑人 | 国产乱子一区二区 | 天天干网 | 久久精品婷婷 | 国产在线观看黄色 | 乱妇乱女熟妇熟女网站 | 成人午夜在线观看 | 日本a在线播放 | 成人精品一区二区三区在线 | 五月中文字幕 | 欧美寡妇性猛交 | 日本超碰在线 | 理论片高清免费理伦片 | 午夜神器在线观看 | 成人av综合 | 精品国产一区二区视频 | 日韩不卡一区二区 | 牛牛澡牛牛爽一区二区 | 日韩欧美一卡二卡 | jiizzyou性欧美老片 | 日韩欧美视频一区 | 国产jk精品白丝av在线观看 | 狠狠地日| 亚洲h视频 | 国产在线观看免费av | 欧美专区日韩专区 | 福利在线国产 | 欧美精品第一页 | 99热6这里只有精品 三级av在线免费观看 | 亚洲三级中文字幕 | 午夜精品福利一区二区三区蜜桃 | 精品人伦一区二区三区蜜桃免费 | 成人精品视频在线 | 嫩草影院一区二区三区 | 成年人的黄色片 | 3d欧美精品动漫xxxx无尽 | 又色又爽又高潮免费视频国产 | 熟妇人妻无乱码中文字幕真矢织江 | www.色播.com| 激情五月av | 一区二区三区免费在线 | 精品无码在线视频 | 精品国偷自产国产一区 | 91小视频在线 | 女人高潮娇喘1分47秒 | 免费毛片看片 | 亚洲欧美久久久 | 久久久区 | 性工作者十日谈 |