ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1471. Расстояние в дереве

here is my code. can you help me?
Послано abc 26 сен 2012 11:23
I use rools of tree. and i have crashed test#2
==>
# include <stdio.h>

long n;
long u[500005],v[500005],w[500005];
long m;
long x[750075],y[750075];
long t[100005][5];
long q[200],s[200];

int main()
{
    scanf("%ld",&n);

    for(int i=0;i<n-1;i++)
    {
        scanf("%ld %ld %ld",&u[i],&v[i],&w[i]);

        if(u[i]<v[i])
        {
            if(v[i]%2==0)
            t[u[i]][0]=w[i];

            else
            t[u[i]][1]=w[i];
        }

        else
        {
            if(u[i]%2==0)
            t[v[i]][0]=w[i];

            else
            t[v[i]][1]=w[i];
        }
    }

    int r=0,d=0,e=0;

    while(e<17)
    {
        q[e]=r;
        s[e]=d;
        r=r*2+1;
        d=d*2+2;
        e++;
    }

    scanf("%ld",&m);

    for(int i=0;i<m;i++)
    scanf("%ld %ld",&x[i],&y[i]);

    for(int i=0;i<m;i++)
    {
        long sum=0;

        while(x[i]!=y[i])
        {
            for(int j=e;j>=0;j--)
            {
                if(x[i]>=q[j] && x[i]<=s[j])
                {
                    int a;
                    if(x[i]%2==0)
                    {
                        a=x[i]/2-1;
                        sum+=t[a][0];
                    }

                    else
                    {
                        a=x[i]/2;
                        sum+=t[a][1];
                    }
                    x[i]=a;
                    break;
                }

                if(y[i]>=q[j] && y[i]<=s[j])
                {
                    int a;
                    if(y[i]%2==0)
                    {
                        a=y[i]/2-1;
                        sum+=t[a][0];
                    }

                    else
                    {
                        a=y[i]/2;
                        sum+=t[a][1];
                    }
                    y[i]=a;
                    break;
                }

            }
        }

        printf("%ld\n",sum);
    }
return 0;
}

Edited by author 26.09.2012 11:23