多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > BZOJ 4009 HNOI2015 接水果 樹套樹

BZOJ 4009 HNOI2015 接水果 樹套樹

來源:程序員人生   發布時間:2015-06-25 08:05:41 閱讀次數:2903次

題目大意:給定1棵樹和m條路徑,每條路徑有1個權值,Q次詢問,每次詢問某條路經包括的所有路徑中權值的第k小
原來精神污染那個題是這么做的啊QwQ
題解網上都有,我就直接貼代碼了
沒心情寫題解了

#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define M 40400 using namespace std; struct Line{ int type; int x,y1,y2,z; Line() {} Line(int _,int __,int ___,int ____,int _____): type(_),x(__),y1(___),y2(____),z(_____) {} bool operator < (const Line &l) const { if(x!=l.x) return x < l.x; return type > l.type; } }lines[M<<2]; struct Query{ int x,y,k,id; bool operator < (const Query &q) const { return x < q.x ; } }queries[M]; struct abcd{ int to,next; }table[M<<1]; int head[M],_tot; int n,m,q,tot; int dpt[M],fa[M][16],st[M],ed[M]; int ans[M]; void Add(int x,int y) { table[++_tot].to=y; table[_tot].next=head[x]; head[x]=_tot; } void DFS(int x) { static int T; int i; dpt[x]=dpt[fa[x][0]]+1; st[x]=++T; for(i=head[x];i;i=table[i].next) if(table[i].to!=fa[x][0]) { fa[table[i].to][0]=x; DFS(table[i].to); } ed[x]=T; } int LCA(int x,int y) { int j; if(dpt[x]<dpt[y]) swap(x,y); for(j=15;~j;j--) if(dpt[fa[x][j]]>=dpt[y]) x=fa[x][j]; if(x==y) return x; for(j=15;~j;j--) if(fa[x][j]!=fa[y][j]) x=fa[x][j],y=fa[y][j]; return fa[x][0]; } int Second_LCA(int x,int y) { int j; for(j=15;~j;j--) if(dpt[fa[y][j]]>dpt[x]) y=fa[y][j]; return y; } void Insert_Rectangle(int x1,int x2,int y1,int y2,int z) { lines[++tot]=Line(1,x1,y1,y2,z); lines[++tot]=Line(-1,x2+1,y1,y2,z); } struct Segtree{ Segtree *ls,*rs; int cnt; void* operator new (size_t) { static Segtree *mempool,*C; if(C==mempool) mempool=(C=new Segtree[1<<16])+(1<<16); C->ls=C->rs=0x0; C->cnt=0; return C++; } friend void Modify(Segtree *&p,int x,int y,int pos,int val) { int mid=x+y>>1; if(!p) p=new Segtree; p->cnt+=val; if(x==y) return ; if(pos<=mid) Modify(p->ls,x,mid,pos,val); else Modify(p->rs,mid+1,y,pos,val); } friend int Get_Kth(Segtree *stack[],int top,int x,int y,int k) { int i,mid=x+y>>1,cnt=0; if(x==y) return mid; for(i=1;i<=top;i++) cnt+=stack[i]&&stack[i]->ls?stack[i]->ls->cnt:0; if(k<=cnt) { for(i=1;i<=top;i++) stack[i]=stack[i]?stack[i]->ls:0x0; return Get_Kth(stack,top,x,mid,k); } else { for(i=1;i<=top;i++) stack[i]=stack[i]?stack[i]->rs:0x0; return Get_Kth(stack,top,mid+1,y,k-cnt); } } }; namespace BIT{ Segtree *c[M]; void Update(int x,int pos,int val) { for(;x;x-=x&-x) Modify(c[x],0,1000000000,pos,val); } int Get_Kth(int x,int k) { static Segtree *stack[M];int top; top=0; for(;x<=n;x+=x&-x) stack[++top]=c[x]; return Get_Kth(stack,top,0,1000000000,k); } } int main() { using namespace BIT; int i,j,x,y,z; cin>>n>>m>>q; for(i=1;i<n;i++) { scanf("%d%d",&x,&y); Add(x,y);Add(y,x); } DFS(1); for(j=1;j<=15;j++) for(i=1;i<=n;i++) fa[i][j]=fa[fa[i][j-1]][j-1]; for(i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); if(st[x]>st[y]) swap(x,y); int lca=LCA(x,y); if(lca!=x) Insert_Rectangle(st[x],ed[x],st[y],ed[y],z); else { int temp=Second_LCA(x,y); if(st[temp]!=1) Insert_Rectangle(1,st[temp]-1,st[y],ed[y],z); if(ed[temp]!=n) Insert_Rectangle(st[y],ed[y],ed[temp]+1,n,z); } } sort(lines+1,lines+tot+1); for(i=1;i<=q;i++) { scanf("%d%d%d",&x,&y,&z); if(st[x]>st[y]) swap(x,y); queries[i].x=st[x]; queries[i].y=st[y]; queries[i].k=z; queries[i].id=i; } sort(queries+1,queries+q+1); for(j=1,i=1;i<=q;i++) { for(;j<=tot&&lines[j].x<=queries[i].x;j++) Update(lines[j].y1-1,lines[j].z,-lines[j].type), Update(lines[j].y2,lines[j].z,lines[j].type); ans[queries[i].id]=Get_Kth(queries[i].y,queries[i].k); } for(i=1;i<=q;i++) printf("%d ",ans[i]); return 0; }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 综合亚洲欧美日韩一区二区 | 夜夜爽www| 天天更新天天久久久更新影院 | 九九精品久久久久久久久 | 视频一区二区免费 | 亚洲精品推荐 | 一级久久 | 四虎东方va私人影库在线观看 | 毛色毛片免费看 | 乌克兰性欧美精品高清bd | 欧美一区二区精品 | 国产第一区二区三区在线观看 | 日韩免费影院 | 综合欧美日韩一区二区三区 | 国产福利写真视频在线观看 | 午夜www | 亚洲免费成人在线 | 一级做a爰性视频 | 国产精品极品美女自在线看免费一区二区 | 婷婷在线五月 | 最近高清无吗免费看 | 久久r这里只有精品 | 偷拍区自拍区 | videos雌雄同体xxxx视频 | 丹麦毛一级毛片www 岛国福利片 | 亚洲国产日韩在线观频 | free日本xxxx另类hd | 国产不卡毛片 | 老司机午夜精品视频观看 | 久久精品国产欧美 | 99成人在线视频 | 亚久久 | 欧美xxxx做受欧美 | 欧美freesex呦交hd | 国产精品免费一区二区三区 | 欧美抽搐一进一进一出 | 波多野一区二区 | 国内精品伊人久久大香线焦 | 中文字幕在线免费观看 | 毛片破处| 456亚洲人成影院在线观 |