結果

問題 No.2676 A Tourist
ユーザー NokonoKotlin
提出日時 2024-03-13 20:56:35
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
TLE  
実行時間 -
コード長 2,461 bytes
コンパイル時間 1,615 ms
コンパイル使用メモリ 158,092 KB
実行使用メモリ 15,140 KB
最終ジャッジ日時 2024-09-29 23:19:05
合計ジャッジ時間 9,752 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1 -- * 1
other TLE * 1 -- * 30
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

// include
//------------------------------------------
#include <algorithm>
#include <bitset>
#include <cassert>
#include <cctype>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <unordered_set>
#include <utility>
#include <vector>
using namespace std;
const long long INF = 4e18;
const long long NINF = 1 - INF;
int N;
vector<long long> a; // [u] := u
vector<vector<int> > G; //
int main() {
int Q;
cin >> N >> Q;
G.resize(N);
a.resize(N);
for (long long &x : a) cin >> x;
for (int i = 0; i < N - 1; i++) {
int u, v;
cin >> u >> v;
u--;
v--;
G[u].push_back(v);
G[v].push_back(u);
}
int query_times = 0; // (bfs)
vector<pair<int, int> > visited(N + 1, make_pair(-1, -1)); // second
vector<int> on_catapilar_path(N + 1, -1); // [x]:= query_times x
while (Q-- > 0) {
long long t, u, v;
cin >> t >> u >> v;
query_times++;
if (t == 0) {
u--;
a[u] += v;
} else {
u--;
v--;
queue<int> q;
q.push(u);
visited[u] = {query_times, -1};
while (!q.empty()) {
int now = q.front();
q.pop();
for (int nx : G[now]) {
if (visited[nx].first == query_times) continue;
q.push(nx);
visited[nx] = {query_times, now};
}
}
int now = v;
while (true) {
on_catapilar_path[now] = query_times;
for (int nx : G[now]) on_catapilar_path[nx] = query_times;
if (now == u) break;
now = visited[now].second;
}
long long res = 0;
for (int x = 0; x <= N; x++)
if (on_catapilar_path[x] == query_times) res += a[x];
cout << res << endl;
}
}
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0