Submission #62876122
Source Code Expand
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define rep(i,n) for(int i=0; i<(int)(n); i++)
using i64 = long long;
/*
* 永続セグメント木の実装
*/
struct Val { i64 sum=0; int cnt=0; };
Val operator+(Val l, Val r){ return { l.sum + r.sum, l.cnt + r.cnt }; }
struct Node { int l, r; Val sum; };
Node A[100000 * 20 * 3];
int nodecnt = 0;
Val nodesum(int i){ return i < 0 ? Val() : A[i].sum; }
int newMidNode(int l, int r){
int p = nodecnt++;
A[p].l = l; A[p].r = r;
A[p].sum = nodesum(l) + nodesum(r);
return p;
}
int newLeafNode(Val x){
int p = nodecnt++;
A[p].l = A[p].r = -1;
A[p].sum = x;
return p;
}
int constructSeg(int N){
if(N == 0) return -1;
if(N == 1) return newLeafNode(Val());
return newMidNode(constructSeg(N/2), constructSeg((N+1)/2));
}
int updateSeg(int i, int l, int r, int p, Val val){
if(l + 1 == r) return newLeafNode(val);
int m = (l+r)/2;
if(p < m) return newMidNode(updateSeg(A[i].l, l, m, p, val), A[i].r);
return newMidNode(A[i].l, updateSeg(A[i].r, m, r, p, val));
}
int N, M, Q;
vector<int> bfs;
vector<int> parent;
vector<int> edgetowhere;
vector<int> segs;
/*
* 根付き木としたときの各頂点の親を得る
* BFS 順を得る
*/
void inputTree(){
vector<int> A(N-1), B(N-1);
vector<vector<int>> E(N);
rep(i,N-1){
int u,v; cin >> u >> v; u--; v--;
E[u].push_back(i);
E[v].push_back(i);
A[i] = u; B[i] = v;
}
bfs.assign(N, 0);
parent.assign(N, -1);
int p = 1;
rep(i,N){
int v = bfs[i];
for(int e : E[v]) if(parent[v] != e){
int w = A[e] ^ B[e] ^ v;
bfs[p++] = w;
parent[w] = e;
}
}
edgetowhere.resize(N-1);
rep(i,N) if(i != 0) edgetowhere[parent[i]] = i;
rep(i,N) if(i!=0) parent[i] = A[parent[i]] ^ B[parent[i]] ^ i;
}
/*
* 関所の情報を読み込み、永続セグメント木を構築
*/
void inputGates(){
vector<vector<int>> gates(N);
vector<pair<int, int>> gatesize(M);
rep(i,M){
int e, x; cin >> e >> x; e--;
int p = edgetowhere[e];
gates[p].push_back(i);
gatesize[i] = { x, i };
}
sort(gatesize.begin(), gatesize.end());
vector<int> ord(M);
rep(i,M) ord[gatesize[i].second] = i;
segs.assign(N, -1);
segs[0] = constructSeg(M);
for(int v : bfs) if(v != 0){
int w = parent[v];
int seg = segs[w];
for(int gate : gates[v]){
int idx = ord[gate];
int sz = gatesize[idx].first;
seg = updateSeg(seg, 0, M, idx, {sz,1});
}
segs[v] = seg;
}
}
/*
* LCA の計算
*/
vector<vector<int>> PP;
vector<int> depth;
int PPD = 16;
void pptable(){
PP.assign(PPD+1, vector<int>(N));
PP[0] = parent;
PP[0][0] = 0;
rep(d,PPD) rep(i,N) PP[d+1][i] = PP[d][PP[d][i]];
depth.assign(N, 0);
for(int i : bfs) if(i != 0) depth[i] = depth[parent[i]] + 1;
}
int lca(int u, int v){
if(depth[u] > depth[v]) swap(u, v);
for(int d=PPD; d>=0; d--) if((depth[v] - depth[u]) & (1 << d)) v = PP[d][v];
if(u == v) return u;
for(int d=PPD; d>=0; d--) if(PP[d][u] != PP[d][v]){ u = PP[d][u]; v = PP[d][v]; }
return parent[u];
}
/*
* 質問を 1 つ処理
*/
int minGold(vector<pair<int, int>> I, i64 silv){
int ans = 0;
int l = 0, r = M;
while(l + 1 < r){
int m = (l+r)/2;
i64 suml = 0;
for(auto i : I) suml += nodesum(A[i.first].l).sum * i.second;
if(suml <= silv){
silv -= suml;
for(auto& i : I) i.first = A[i.first].r;
l=m;
}
else{
for(auto i : I) ans += nodesum(A[i.first].r).cnt * i.second;
for(auto& i : I) i.first = A[i.first].l;
r=m;
}
}
i64 sumx = 0;
for(auto i : I) sumx += nodesum(i.first).sum * i.second;
if(sumx > silv) for(auto i : I) ans += nodesum(i.first).cnt * i.second;
return ans;
}
int main(){
std::cin.tie(nullptr);
ios::sync_with_stdio(false);
cin >> N >> M >> Q;
inputTree();
inputGates();
pptable();
rep(q,Q){
int s, t, x; i64 y; cin >> s >> t >> x >> y; s--; t--;
int g = lca(s, t);
int gold = minGold({ {segs[s],1}, {segs[t],1}, {segs[g],-2} }, y);
if(gold > x) cout << "-1\n"; else cout << (x-gold) << '\n';
}
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | A - ふたつの通貨 (Two Currencies) |
| User | Nachia |
| Language | C++ 20 (gcc 12.2) |
| Score | 100 |
| Code Size | 4619 Byte |
| Status | AC |
| Exec Time | 498 ms |
| Memory | 154916 KiB |
Judge Result
| Set Name | Sample | Subtask1 | Subtask2 | Subtask3 | Subtask4 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 10 / 10 | 28 / 28 | 30 / 30 | 32 / 32 | ||||||||||
| Status |
|
|
|
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt |
| Subtask1 | 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt |
| Subtask2 | 01-26.txt, 01-27.txt, 01-28.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 02-16.txt, 02-17.txt, 02-18.txt, 02-19.txt, 02-20.txt, 02-21.txt, 02-22.txt, 02-23.txt, 02-24.txt, 02-25.txt, 02-26.txt, 02-27.txt, sample-02.txt |
| Subtask3 | 01-29.txt, 01-30.txt, 01-31.txt, 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, 03-10.txt, 03-11.txt, 03-12.txt, 03-13.txt, sample-03.txt |
| Subtask4 | 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, 01-31.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 02-16.txt, 02-17.txt, 02-18.txt, 02-19.txt, 02-20.txt, 02-21.txt, 02-22.txt, 02-23.txt, 02-24.txt, 02-25.txt, 02-26.txt, 02-27.txt, 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, 03-10.txt, 03-11.txt, 03-12.txt, 03-13.txt, 04-01.txt, 04-02.txt, 04-03.txt, 04-04.txt, 04-05.txt, 04-06.txt, 04-07.txt, 04-08.txt, 04-09.txt, 04-10.txt, 04-11.txt, 04-12.txt, 04-13.txt, 04-14.txt, 04-15.txt, 04-16.txt, 04-17.txt, 04-18.txt, 04-19.txt, 04-20.txt, 04-21.txt, 04-22.txt, 04-23.txt, 04-24.txt, 04-25.txt, sample-01.txt, sample-02.txt, sample-03.txt, sample-04.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 01-01.txt | AC | 56 ms | 144224 KiB |
| 01-02.txt | AC | 56 ms | 144272 KiB |
| 01-03.txt | AC | 56 ms | 144236 KiB |
| 01-04.txt | AC | 56 ms | 144452 KiB |
| 01-05.txt | AC | 56 ms | 144368 KiB |
| 01-06.txt | AC | 56 ms | 144376 KiB |
| 01-07.txt | AC | 56 ms | 144444 KiB |
| 01-08.txt | AC | 57 ms | 144276 KiB |
| 01-09.txt | AC | 56 ms | 144296 KiB |
| 01-10.txt | AC | 56 ms | 144352 KiB |
| 01-11.txt | AC | 56 ms | 144348 KiB |
| 01-12.txt | AC | 56 ms | 144352 KiB |
| 01-13.txt | AC | 56 ms | 144336 KiB |
| 01-14.txt | AC | 57 ms | 144412 KiB |
| 01-15.txt | AC | 57 ms | 144360 KiB |
| 01-16.txt | AC | 57 ms | 144368 KiB |
| 01-17.txt | AC | 58 ms | 144384 KiB |
| 01-18.txt | AC | 57 ms | 144348 KiB |
| 01-19.txt | AC | 56 ms | 144316 KiB |
| 01-20.txt | AC | 56 ms | 144272 KiB |
| 01-21.txt | AC | 56 ms | 144372 KiB |
| 01-22.txt | AC | 55 ms | 144372 KiB |
| 01-23.txt | AC | 56 ms | 144372 KiB |
| 01-24.txt | AC | 57 ms | 144384 KiB |
| 01-25.txt | AC | 57 ms | 144300 KiB |
| 01-26.txt | AC | 56 ms | 144276 KiB |
| 01-27.txt | AC | 55 ms | 144360 KiB |
| 01-28.txt | AC | 55 ms | 144364 KiB |
| 01-29.txt | AC | 56 ms | 144288 KiB |
| 01-30.txt | AC | 55 ms | 144332 KiB |
| 01-31.txt | AC | 56 ms | 144368 KiB |
| 02-01.txt | AC | 216 ms | 154372 KiB |
| 02-02.txt | AC | 225 ms | 150660 KiB |
| 02-03.txt | AC | 207 ms | 152452 KiB |
| 02-04.txt | AC | 185 ms | 152708 KiB |
| 02-05.txt | AC | 185 ms | 153164 KiB |
| 02-06.txt | AC | 285 ms | 154116 KiB |
| 02-07.txt | AC | 305 ms | 154308 KiB |
| 02-08.txt | AC | 285 ms | 154844 KiB |
| 02-09.txt | AC | 302 ms | 154724 KiB |
| 02-10.txt | AC | 283 ms | 154336 KiB |
| 02-11.txt | AC | 485 ms | 153924 KiB |
| 02-12.txt | AC | 497 ms | 153848 KiB |
| 02-13.txt | AC | 484 ms | 154260 KiB |
| 02-14.txt | AC | 396 ms | 154276 KiB |
| 02-15.txt | AC | 382 ms | 154016 KiB |
| 02-16.txt | AC | 428 ms | 153728 KiB |
| 02-17.txt | AC | 273 ms | 153396 KiB |
| 02-18.txt | AC | 263 ms | 154160 KiB |
| 02-19.txt | AC | 277 ms | 153592 KiB |
| 02-20.txt | AC | 261 ms | 154264 KiB |
| 02-21.txt | AC | 268 ms | 154328 KiB |
| 02-22.txt | AC | 255 ms | 153532 KiB |
| 02-23.txt | AC | 246 ms | 154268 KiB |
| 02-24.txt | AC | 194 ms | 154048 KiB |
| 02-25.txt | AC | 178 ms | 154840 KiB |
| 02-26.txt | AC | 197 ms | 154808 KiB |
| 02-27.txt | AC | 216 ms | 154372 KiB |
| 03-01.txt | AC | 270 ms | 153720 KiB |
| 03-02.txt | AC | 231 ms | 152736 KiB |
| 03-03.txt | AC | 306 ms | 149568 KiB |
| 03-04.txt | AC | 451 ms | 153256 KiB |
| 03-05.txt | AC | 477 ms | 153112 KiB |
| 03-06.txt | AC | 483 ms | 153884 KiB |
| 03-07.txt | AC | 358 ms | 153424 KiB |
| 03-08.txt | AC | 386 ms | 153728 KiB |
| 03-09.txt | AC | 387 ms | 153296 KiB |
| 03-10.txt | AC | 217 ms | 153928 KiB |
| 03-11.txt | AC | 226 ms | 153184 KiB |
| 03-12.txt | AC | 253 ms | 153460 KiB |
| 03-13.txt | AC | 251 ms | 153896 KiB |
| 04-01.txt | AC | 236 ms | 152688 KiB |
| 04-02.txt | AC | 224 ms | 149808 KiB |
| 04-03.txt | AC | 183 ms | 149008 KiB |
| 04-04.txt | AC | 323 ms | 153740 KiB |
| 04-05.txt | AC | 320 ms | 154916 KiB |
| 04-06.txt | AC | 316 ms | 153896 KiB |
| 04-07.txt | AC | 301 ms | 154388 KiB |
| 04-08.txt | AC | 315 ms | 154392 KiB |
| 04-09.txt | AC | 498 ms | 153892 KiB |
| 04-10.txt | AC | 463 ms | 153992 KiB |
| 04-11.txt | AC | 437 ms | 154184 KiB |
| 04-12.txt | AC | 423 ms | 153452 KiB |
| 04-13.txt | AC | 390 ms | 153416 KiB |
| 04-14.txt | AC | 413 ms | 153636 KiB |
| 04-15.txt | AC | 281 ms | 153940 KiB |
| 04-16.txt | AC | 267 ms | 153400 KiB |
| 04-17.txt | AC | 277 ms | 153656 KiB |
| 04-18.txt | AC | 270 ms | 153632 KiB |
| 04-19.txt | AC | 287 ms | 153368 KiB |
| 04-20.txt | AC | 306 ms | 154276 KiB |
| 04-21.txt | AC | 269 ms | 154352 KiB |
| 04-22.txt | AC | 204 ms | 154072 KiB |
| 04-23.txt | AC | 201 ms | 154268 KiB |
| 04-24.txt | AC | 208 ms | 154232 KiB |
| 04-25.txt | AC | 218 ms | 154300 KiB |
| sample-01.txt | AC | 52 ms | 144124 KiB |
| sample-02.txt | AC | 53 ms | 144040 KiB |
| sample-03.txt | AC | 53 ms | 144052 KiB |
| sample-04.txt | AC | 52 ms | 144096 KiB |