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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

spoj 375 Query on a tree (树链剖分)

發布時間:2024/4/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spoj 375 Query on a tree (树链剖分) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:?http://www.spoj.com/problems/QTREE/

題意:

給一顆樹,每條邊有一個權值。有兩種操作:

1、修改某條邊的值;

2、詢問a、b兩點路徑上邊權的最大值。

分析:樹鏈剖分模板題

代碼如下:

1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 6 using namespace std; 7 const int maxn=10010; 8 9 struct Edge 10 { 11 int to,next; 12 }edge[maxn*2]; 13 int head[maxn]; 14 int cnt,tmp,n; 15 int dep[maxn],fa[maxn],size[maxn],son[maxn],top[maxn],id[maxn],rank[maxn]; 16 struct Node 17 { 18 int u,v,c; 19 }node[maxn]; 20 21 void init() 22 { 23 memset(head,-1,sizeof(head)); 24 memset(son,-1,sizeof(son)); 25 tmp=0; 26 cnt=0; 27 } 28 29 void addedge(int u,int v) 30 { 31 edge[cnt].to=v; 32 edge[cnt].next=head[u]; 33 head[u]=cnt++; 34 } 35 36 void dfs_1(int u,int f,int d) 37 { 38 dep[u]=d; 39 size[u]=1; 40 fa[u]=f; 41 for(int i=head[u];i!=-1;i=edge[i].next) 42 { 43 int v=edge[i].to; 44 if(v==f) 45 continue; 46 dfs_1(v,u,d+1); 47 size[u]+=size[v]; 48 if(son[u]==-1||size[son[u]]<size[v]) 49 son[u]=v; 50 } 51 } 52 53 void dfs_2(int u,int tp) 54 { 55 top[u]=tp; 56 id[u]=++tmp; 57 rank[id[u]]=u; 58 if(son[u]!=-1) 59 dfs_2(son[u],tp); 60 for(int i=head[u];i!=-1;i=edge[i].next) 61 { 62 int v=edge[i].to; 63 if(v!=fa[u]&&v!=son[u]) 64 dfs_2(v,v); 65 } 66 } 67 struct Tree 68 { 69 int left,right; 70 int m; 71 }tree[maxn*4]; 72 73 void pushup(int i) 74 { 75 tree[i].m=max(tree[i*2].m,tree[i*2+1].m); 76 } 77 78 void build(int i,int begin,int end) 79 { 80 tree[i].left=begin; 81 tree[i].right=end; 82 tree[i].m=0; 83 if(begin==end) 84 return; 85 int mid=(begin+end)/2; 86 build(i*2,begin,mid); 87 build(i*2+1,mid+1,end); 88 } 89 90 void update(int i,int k,int val) 91 { 92 if(tree[i].left==k&&tree[i].right==k) 93 { 94 tree[i].m=val; 95 return; 96 } 97 int mid=(tree[i].left+tree[i].right)/2; 98 if(k<=mid) 99 update(i*2,k,val); 100 else 101 update(i*2+1,k,val); 102 pushup(i); 103 } 104 105 int query(int i,int begin,int end) 106 { 107 if(tree[i].left>=begin&&tree[i].right<=end) 108 return tree[i].m; 109 int mid=(tree[i].left+tree[i].right)/2; 110 int res=0; 111 if(mid>=begin) 112 res=max(res,query(i*2,begin,end)); 113 if(mid<end) 114 res=max(res,query(i*2+1,begin,end)); 115 return res; 116 } 117 118 int find(int u,int v) 119 { 120 int tp1=top[u],tp2=top[v]; 121 int res=0; 122 while(tp1!=tp2) 123 { 124 if(dep[tp1]<dep[tp2]) 125 { 126 swap(tp1,tp2); 127 swap(u,v); 128 } 129 res=max(res,query(1,id[tp1],id[u])); 130 u=fa[tp1]; 131 tp1=top[u]; 132 } 133 if(u==v) 134 return res; 135 if(dep[u]>dep[v]) 136 swap(u,v); 137 res=max(res,query(1,id[son[u]],id[v])); 138 return res; 139 } 140 141 int main() 142 { 143 int t; 144 scanf("%d",&t); 145 while(t--) 146 { 147 init(); 148 scanf("%d",&n); 149 for(int i=1;i<n;i++) 150 { 151 scanf("%d%d%d",&node[i].u,&node[i].v,&node[i].c); 152 addedge(node[i].u,node[i].v); 153 addedge(node[i].v,node[i].u); 154 } 155 dfs_1(1,0,1); 156 dfs_2(1,1); 157 build(1,1,tmp); 158 for(int i=1;i<n;i++) 159 { 160 if(dep[node[i].u]>dep[node[i].v]) 161 swap(node[i].u,node[i].v); 162 update(1,id[node[i].v],node[i].c); 163 } 164 char s[20]; 165 int num,cost; 166 while(1) 167 { 168 scanf("%s",s); 169 if(s[0]=='D') 170 break; 171 else if(s[0]=='C') 172 { 173 scanf("%d%d",&num,&cost); 174 update(1,id[node[num].v],cost); 175 } 176 else 177 { 178 int a,b; 179 scanf("%d%d",&a,&b); 180 printf("%d\n",find(a,b)); 181 } 182 } 183 } 184 return 0; 185 }

?

轉載于:https://www.cnblogs.com/yaoyueduzhen/p/5311184.html

總結

以上是生活随笔為你收集整理的spoj 375 Query on a tree (树链剖分)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日韩不卡av | 欧美有码在线 | 综合久久久久综合 | 欧美xxxx免费虐 | 中国免费黄色片 | 内射一区二区 | 91色视频在线观看 | 欧美一区亚洲二区 | 熟女少妇a性色生活片毛片 亚洲伊人成人网 | 精品日韩在线播放 | 日本久色 | 男人天堂综合网 | 色不卡| 久久九九久久九九 | www在线视频| 开元在线观看视频国语 | 美女免费看片 | 国产人妻精品一区二区三区不卡 | 李丽珍裸体午夜理伦片 | 91久久国产综合久久 | 91精品国产99 | 99热在线播放 | 嫩草视频在线免费观看 | 国产精品久久久久久在线观看 | 欧美xxxx性| 日韩一区免费观看 | 亚洲视频在线观看视频 | 高清福利视频 | 完全免费在线视频 | 免费色网 | 成年网站 | 免费激情片| 91调教打屁股xxxx网站 | 人人妻人人做人人爽 | 中文字字幕在线观看 | 亚洲综合色在线观看 | 国产第一页视频 | 污视频网站免费看 | 久热精品在线观看 | 欧美激情精品久久久久久变态 | 亚洲国产91 | 国产成人av无码精品 | 精品无码在线观看 | 午夜免费福利小视频 | 色爱综合网 | 99国产精品久久久久久久成人 | 看黄色网址| 国产人澡人澡澡澡人碰视频 | 亚洲精品久久久久久无码色欲四季 | 四虎免费在线观看 | 成人国产精品久久久 | 久久精品欧美一区二区三区不卡 | 丰满饥渴老女人hd | 久久精品视频一区二区 | 夜夜嗨网站 | 五月丁香啪啪 | 国产精品免费看片 | 少妇高潮21p | 美女的胸给男人玩视频 | 性高潮久久久久久久 | 日日爱669| 在线不欧美 | 亚洲大色 | 超碰p | 亚洲色偷精品一区二区三区 | 国产在线一区二 | 久久人妻少妇嫩草av | 美女赤身免费网站 | 青青久久国产 | www.69av.com| 精品日韩一区二区三区 | 欧美国产视频 | 久久精品影视 | 亚洲痴女| 在线观看欧美国产 | 久久久久99精品成人片我成大片 | 中国男女全黄大片 | 美女精品久久 | 欧美综合视频 | 美女视频国产 | 四季av在线一区二区三区 | 久艹伊人 | 扒开jk护士狂揉免费 | 最近中文字幕在线观看视频 | 成人爱爱免费视频 | 泽村玲子av| 毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 精品乱 | 国产又粗又大又长 | 亚洲成av人片久久 | 欧美精品乱码99久久蜜桃 | 在线免费看污网站 | 欧美日韩不卡合集视频 | 欧美日韩成人精品 | 超碰最新上传 | 天天狠天天插天天透 | 欧美日韩中文在线观看 | 人妻互换一区二区激情偷拍 | 在线不卡日本 |