QOJ.ac

QOJ

Time Limit: 3 s Memory Limit: 512 MB Total points: 100

#350. 旅行诗

Statistics

给你一颗有根树,每个节点有一个逃脱代价 $t_u$,每个节点到达自己的父亲有一个代价 $f_u$,到达自己的孩子 $v$ 有一个代价 $g_v$。

每次给你一个 $u, k$,询问从 $u$ 出发,如何选取一个节点 $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$,$i$ 从 $2$ 开始编号,$p_i$ 是 $i$ 的父亲节点,保证 $p_i < i$。

为了减少输入和输出量,询问和输出可以认为由以下代码接管,注意下文中的 length[] 数组意为:第 $i$ 项是 $i$ 节点到根节点经过的边数。你要解决询问的部分是其中的 query() 函数。你可以在主程序中处理完 length[] 数组后调用一次 solve() 函数。

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

样例 1 解释

下面是本样例的实际每次询问和答案:

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$,字符串长度就是根节点到我所在节点经过的边数。

我想请你帮我的是,如何使用最短的时间完成逃离?我可能会给你多个问题,时间紧迫,请你尽快告诉我答案。

歌词

在无趣人生之中,撞出水花,

在烟火虹霓之中,做梦想家,

逆光而来的剪影,心跳一霎,

——“ 那是你啊。”

 

在平淡际遇之中,时光发芽,

在空旷教室大喊,未曾声沙,

我眼中所有色彩,最明亮的,

——“只有你啊。”

About Issues

We understand that our problem archive is not perfect. If you find any issues with the problem, including the statement, scoring configuration, time/memory limits, test cases, etc.

You may use this form to submit an issue regarding the problem. A problem moderator will review your issue and proceed it properly.

STOP! Before you submit an issue, please READ the following guidelines:

  1. This is not a place to publish a discussion, editorial, or requests to debug your code. Your issue will only be visible by you and problem moderators. Other users will not be able to view or reply your issues.
  2. Do not submit duplicated issues. If you have already submitted one, please wait for an moderator to review it. Submitting multiple issues will not speed up the review process and might cause your account to be banned.
  3. Issues must be filed in English or Chinese only.
  4. Be sure your issue is related to this problem. If you need to submit an issue regarding another problem, contest, category, etc., you should submit it to the corresponding page.

Active Issues 0

No issues in this category.

Closed/Resolved Issues 0

No issues in this category.