QOJ.ac

QOJ

時間限制: 3 s 記憶體限制: 512 MB 總分: 100

#350. Путешествие поэта

统计

Дано корневое дерево, где каждый узел $u$ имеет стоимость побега $t_u$, стоимость перехода к родителю $f_u$ и стоимость перехода к потомку $v$ — $g_v$.

Для каждого запроса $(u, k)$ необходимо выбрать узел $v$ так, чтобы на пути от $u$ до $v$ каждый узел находился на расстоянии от корня не менее $k$ ребер, и минимизировать сумму стоимости достижения этого узла и стоимости побега из него. У вас будет очень много запросов, для каждого из которых нужно найти минимальную общую стоимость.

Входные данные

Первая строка содержит восемь неотрицательных целых чисел $n, m, \mathrm{SA}, \mathrm{SB}, \mathrm{SC}, t_1, t_2$, где $n$ — количество узлов в дереве, а $m$ — количество запросов.

Следующая строка содержит $n$ неотрицательных целых чисел $t_i$.

Далее следуют $n - 1$ строка, каждая из которых содержит 3 целых числа $p_i, f_i, g_i$. Узлы нумеруются начиная с 2, где $p_i$ — родитель узла $i$, при этом гарантируется, что $p_i < i$.

Чтобы уменьшить объем ввода и вывода, запросы и вывод генерируются с помощью следующего кода. Обратите внимание, что массив length[] означает количество ребер от узла $i$ до корня. Вам необходимо реализовать функцию query(). Вы можете вызвать функцию solve() в основной программе после заполнения массива length[].

unsigned int SA, SB, SC;
int n, m, t1, t2;

unsigned int rng61() {
    SA ^= SA << 16;
    SA ^= SA >> 5;
    SA ^= SA << 1;
    unsigned int t = SA;
    SA = SB;
    SB = SC;
    SC ^= t ^ SA;
    return SC;
}

long long query(int u, int k);

void solve() {
    long long lastans = 0, output = 0;
    while (m--) {
        int u = (rng61() ^ (t1 * lastans)) % n + 1;
        int k = (rng61() ^ (t1 * lastans)) % (length[u] + 1) * t2;
        lastans = query(u, k);
        output ^= lastans + m;
    }
    printf("%lld\n", output);
}

Этот код можно найти в файле lyric/template.cpp в предоставленных материалах.

Выходные данные

Выведите значение переменной output, полученное в результате работы алгоритма.

Примеры

Входные данные 1

10 10 629647033 688064407 427303738 1 1
8 7 16 11 7 20 18 9 16 6
1 3 13
2 8 11
3 12 3
4 20 3
5 10 14
3 19 8
7 9 8
8 12 18
6 10 10

Выходные данные 1

23

Примечание

Ниже приведены фактические запросы и ответы для данного примера:

4 2
10
1 0
8
6 2
16
10 6
6
6 4
16
6 0
16
6 2
16
6 3
16
10 0
6
1 0
8

Ограничения

Для 100% данных: $1\le n\le 3\times 10^5, 1\le m \le 6\times 10^6, 0\le t_1, t_2 \le 1$, остальные целые числа во входных данных находятся в диапазоне от $0$ до $10^9$.

Для 0% данных гарантируется $m \le 5\times 10^7$.

Тест $n$ $m$ $t_1$ $t_2$
$1$ $=10$ $=n$ $0$ $0$
$2$ $=10$ $=n$ $0$ $1$
$3$ $=10$ $=n$ $1$ $0$
$4$ $=10$ $=n$ $1$ $1$
$5$ $=10^2$ $=n$ $0$ $0$
$6$ $=10^2$ $=n$ $0$ $1$
$7$ $=10^2$ $=n$ $1$ $0$
$8$ $=10^2$ $=n$ $1$ $1$
$9$ $=3,000$ $=n$ $0$ $0$
$10$ $=3,000$ $=n$ $0$ $1$
$11$ $=3,000$ $=n$ $1$ $0$
$12$ $=3,000$ $=n$ $1$ $1$
$13$ $=10^5$ $=n$ $0$ $0$
$14$ $=10^5$ $=n$ $0$ $1$
$15$ $=10^5$ $=n$ $1$ $0$
$16$ $=10^5$ $=n$ $1$ $1$
$17$ $=3\times 10^5$ $=n$ $0$ $0$
$18$ $=3\times 10^5$ $=n$ $0$ $1$
$19$ $=3\times 10^5$ $=2\times10^6$ $1$ $0$
$20$ $=3\times 10^5$ $=2\times10^6$ $1$ $1$
$21,22$ $=3\times 10^5$ $=2\times10^6$ $0$ $1$
$23,24$ $=3\times 10^5$ $=6\times10^6$ $0$ $1$
$25$ $=3\times 10^5$ $=6\times10^6$ $1$ $1$

История

То время, похожее на сказку, промелькнуло мимо. Лань выросла, мир изменился.

Нельзя же вечно строить воздушные замки? Я не хотел этого делать, но... раз уж так вышло, я должен показать ей «новый мир».

Растерянность, изумление. Именно так она выглядела, когда увидела его впервые. Хотя мы репетировали это тысячи раз.

Взросление? Нет, я не признаю этого! Почему мир должен быть таким? Почему мир должен разбивать каждую мечту? И почему я вынужден отпустить её, чтобы она почувствовала эту «беспомощность и страх»?

Пощадите меня, я не могу притворяться довольным или высокопарно заявлять, что это и есть «взросление».

 

Я боюсь, что пламя войны и ненависти опалит её глаза;

Я боюсь, что грязь невежества осквернит её чистоту;

Я боюсь, что лед этого мира погасит её жар.

 

Она просидела в своей старой студии весь день, тупо глядя на звездное небо, которое когда-то нарисовала.

На следующий день у неё появился седой волос.

«Имеет ли искусство... хоть какой-то смысл?!»

Да, рисование — это варварство, поэзия — это варварство.

Я когда-то отвечал на её сто тысяч «почему». Но сегодня я не знаю ответа.

Или, вернее, я не знаю, как ей ответить. Пришлось опустить голову и стиснуть зубы.

«...Прости».

Тот храм рухнул. Как поток воды.

Звезды на небе тоже кровоточат.

Я должен забрать Лань и уйти из этого места.

А способ уйти можно найти только в древних рунах.

Система древних магических рун очень сложна, количество её символов неисчислимо, времени в обрез, и я не собираюсь вдаваться в детали. Я лишь скажу тебе, что есть корневое дерево, и ты можешь считать, что путь от корня до узла представляет собой строку. Руна, которую я ношу с собой, также может быть представлена узлом $u$. Каждый узел на дереве может помочь нам сбежать: если текущая руна — это узел $u$, то для активации потребуется время $t_u$. Однако руну, которую я держу, можно изменять, и это тоже требует времени. Я стираю последний символ руны, то есть перехожу из узла $u$ к его родителю, что требует времени $f_u$, или же перехожу к одному из его потомков $v$, что требует времени $g_v$.

Кроме того, есть ограничение: в любой момент времени я должен гарантировать, что длина строки не меньше $k$, где длина строки — это количество ребер от корня до текущего узла.

Я хочу попросить тебя помочь мне: как совершить побег за кратчайшее время? У меня может быть много вопросов, времени мало, пожалуйста, ответь мне как можно скорее.

Текст песни

В скучной жизни, высекая брызги,

Среди неоновых огней, становясь мечтателем,

Силуэт, идущий против света, на мгновение замирает сердце,

— «Это ты».

 

Среди обыденных встреч, время прорастает,

Крича в пустом классе, не сорвав голос,

Все цвета в моих глазах, самые яркие,

— «Только ты».

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.