HDU 4123
来源:互联网 发布:淘宝试用中心有效果吗 编辑:程序博客网 时间:2024/06/05 20:33
const int maxn = 50010 ;struct Edge{ int v , w , next ;}e[maxn*2];int id , g[maxn] ;void add(int u , int v , int w){ e[id].v = v ; e[id].w = w ; e[id].next = g[u] ; g[u] = id++ ;}int fmaxc[maxn] , fid[maxn] ;int smaxc[maxn] , sid[maxn] ;void dfs1(int u , int fa){ fmaxc[u] = smaxc[u] = fid[u] = sid[u] = 0 ; for(int i = g[u] ; i != -1 ; i = e[i].next){ int v = e[i].v ; if(v == fa) continue ; dfs1(v , u) ; if(fmaxc[v] + e[i].w > smaxc[u]){ smaxc[u] = fmaxc[v] + e[i].w ; sid[u] = v ; if(fmaxc[u] < smaxc[u]){ std::swap(fmaxc[u] , smaxc[u]) ; std::swap(fid[u] , sid[u]) ; } } }}void dfs2(int u , int fa){ for(int i = g[u] ; i != -1 ; i = e[i].next){ int v = e[i].v ; if(v == fa) continue ; if(fid[u] == v){ if(smaxc[u] + e[i].w > smaxc[v]){ smaxc[v] = smaxc[u] + e[i].w ; sid[v] = u ; if(fmaxc[v] < smaxc[v]){ std::swap(fmaxc[v] , smaxc[v]) ; std::swap(fid[v] , sid[v]) ; } } } else{ if(fmaxc[u] + e[i].w > smaxc[v]){ smaxc[v] = fmaxc[u] + e[i].w ; sid[v] = u ; if(fmaxc[v] < smaxc[v]){ std::swap(fmaxc[v] , smaxc[v]) ; std::swap(fid[v] , sid[v]) ; } } } dfs2(v , u) ; }}int n ;int cmax[maxn][20] , cmin[maxn][20] ;int tlog[maxn] ;void rmqinit(){ for(int i = 1 ; i <= n ; i++) cmax[i][0] = cmin[i][0] = fmaxc[i] ; tlog[0] = tlog[1] = 0 ; for(int i = 2 ; i <= n ; i++) tlog[i] = tlog[i>>1] + 1 ; for(int j = 1 ; j <= tlog[n] ; j++){ for(int i = 1 ; i + (1<<j) - 1 <= n ; i++){ cmax[i][j] = std::max(cmax[i][j-1] , cmax[i + (1<<(j-1)) ][j-1]) ; cmin[i][j] = std::min(cmin[i][j-1] , cmin[i + (1<<(j-1)) ][j-1]) ; } }}int rmq(int l , int r){ int i = tlog[r-l+1] ; return std::max(cmax[l][i] , cmax[r - (1<<i) + 1][i]) - std::min(cmin[l][i] , cmin[r - (1<<i) + 1][i]) ;}int main(){ int m , i , u , v , w , d , idx , t ; while(cin>>n>>m){ if(n == 0 && m == 0) break ; id = 0 ; memset(g , -1 , sizeof(g)) ; for(i = 1 ; i < n ; i++){ scanf("%d%d%d" , &u , &v , &w) ; add(u , v , w) ; add(v , u , w) ; } dfs1(1 , 1) ; dfs2(1 , 1) ; rmqinit() ; while(m--){ scanf("%d" , &d) ; idx = 1 ; t = 0 ; for(i = 1 ; i <= n ; i++){ while(idx <= i && rmq(idx , i) > d) idx++ ; t = std::max(t , i - idx + 1) ; } printf("%d\n" , t) ; } } return 0 ;}
0 0
- HDU 4123
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- hdu
- hdu
- MySQL之主键的用法
- Cocos2d-x_CCTextFieldTTF输入框
- ubuntukylin下安装Xware Desktop(迅雷)
- 360公司2015年秋季校园招聘笔试考卷(技术类 D)部分试题程序验证和解析3
- 修改eclipse的背景颜色
- HDU 4123
- 织梦仿站系列教程第十四讲——特定栏目图片调用
- ffmpeg: error while loading shared libraries: libavdevice.so.52: cannot open shared object file: No
- java使用mongoDB和freemarker的注意事项
- Android framework回顾(2) sp 和 wp sp对象
- DedeCMS启用二级域名后,原网址跳转二级域名的解决办法
- android网络开源框架volley(五)——volley的一些细节
- 取石子游戏(杭电1527)
- android中popwindow的使用