結果
問題 | No.2676 A Tourist |
ユーザー |
|
提出日時 | 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 |
ソースコード
// 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;}