QOJ.ac

QOJ

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

#350. 旅行詩

统计

給你一棵有根樹,每個節點有一個逃脫代價 $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

說明

下面是本範例的實際每次詢問和答案:

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.