日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

BZOJ 4009 HNOI2015 接水果 樹套樹

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

題目大意:給定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; }
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 717影视三级理论电影在线 | 久久视频在线看 | 亚洲精品一区二区三区在线 | 99久久这里只有精品 | 99国产精品久久 | 久久艹精品 | 正在播放国产一区 | 爱爱视频日本 | 精品久久久久久久久久中文字幕 | 成人日韩视频 | 天堂电影av| 亚洲va国产va天堂va久久 | 欧美精三区欧美精三区 | 亚洲精品a | 中文在线一区二区 | 国产高清免费观看 | 成人午夜毛片 | 精品视频久久 | 精品国产精品一区二区夜夜嗨 | 久久这里都是精品 | 欧美极品少妇xxxxⅹ免费视频 | 麻豆乱码国产一区二区三区 | 久在线视频 | 国产精品久久久久久久久久久久久 | 国产午夜精品一区二区 | 日韩中文字幕精品 | 999在线视频 | 国产男女免费完整视频 | 精品少妇一区二区三区免费观看 | 18av在线播放 | 3p视频在线播放 | 欧美黄网站 | 欧美激情免费 | 图片区自拍偷拍 | 成人高清一区 | 亚洲最黄网站 | 亚洲精品久久久久久一区二区 | h黄视频| 蜜桃久久久久久久 | 成人精品在线播放 | 成人国产精品入口免费视频 |