栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 4003 Bob’s Race

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 4003 Bob’s Race

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define maxn 50003int f1[maxn], f2[maxn];int g1[maxn], g2[maxn];int n, m;struct E{    int v, next, w;}edge[maxn<<1];int head[maxn], tot;void init(){    tot = 0;    memset(head, -1, sizeof(int)*(n+1));}void add(int s, int t, int w){    edge[tot].v = t;    edge[tot].w = w;    edge[tot].next = head[s];    head[s] = tot++;}int maxz(int a, int b){    return a > b ? a : b;}int minz(int a, int b){    return a < b ? a : b;}void dfs1(int u, int pre){    int i;    f1[u] = f2[u] = 0;    for(i = head[u]; i != -1; i = edge[i].next)    {        int v = edge[i].v;        if(v == pre) continue;        int w = edge[i].w;        dfs1(v, u);        if(f2[u] < f1[v] + w)        { f2[u] = f1[v] + w; g2[u] = v; if(f2[u] > f1[u]) {     swap(f2[u], f1[u]);     swap(g2[u], g1[u]); }        }    }}void dfs2(int u, int pre){    int i;    for(i = head[u]; i != -1; i = edge[i].next)    {        int v = edge[i].v;        if(v == pre) continue;        int w = edge[i].w;        if(g1[u] == v)        { if(f2[v] < f2[u] + w) {     f2[v] = f2[u] + w;     g2[v] = u;     if(f1[v] < f2[v])     {         swap(f1[v], f2[v]);         swap(g1[v], g2[v]);     } }        }        else        { if(f2[v] < f1[u] + w) {     f2[v] = f1[u] + w;     g2[v] = u;     if(f1[v] < f2[v])     {         swap(f1[v], f2[v]);         swap(g1[v], g2[v]);     } }        }        dfs2(v, u);    }}struct DEQUE{    int pos, val;}que1[maxn], que2[maxn];int main(){    int i, j;    int x, y, z;    int Q;    while( ~scanf("%d%d", &n, &m))    {        if(!n && !m) break;        init();        for(i = 2; i <= n; i++)        { scanf("%d%d%d", &x, &y, &z); add(x, y, z); add(y, x, z);        }        dfs1(1, -1);        dfs2(1, -1);        int h1, h2, t1, t2;        int ans;        while(m--)        { scanf("%d", &Q);     h1 = h2 = 1; t1 = t2 = 0; ans = 1; for(i = 1; i <= n; i++) {     while(h1 <= t1 && que1[t1].val >= f1[i])          t1--;     que1[++t1].pos = i;     que1[t1].val = f1[i];     while(h1 <= t1 && abs(que1[t1].val - que1[h1].val) > Q)         h1++;     while(h2 <= t2 && que2[t2].val <= f1[i])          t2--;     que2[++t2].pos = i;     que2[t2].val = f1[i];     while(h2 <= t2 && abs(que2[t2].val - que2[h2].val) > Q)         h2++;     ans = maxz(ans, i - maxz(que1[h1-1].pos, que2[h2-1].pos)); } printf("%dn", ans);        }    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/369080.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号