Submission #643158

#TimeUsernameProblemLanguageResultExecution timeMemory
643158TimDeeTraffickers (RMI18_traffickers)C++17
0 / 100
265 ms398072 KiB
#include <bits/stdc++.h> using namespace std; #define forn(i,n) for (int i=0; i<n; ++i) #define int long long vector<vector<int>> adj(5001); vector<vector<int>> cnt(5001,vector<int>(5001,0)); int path[5001]; int ptr=0; void dfs(int u, int p, int to) { for (auto v:adj[u]) { if (v==p) continue; if (v==to) { path[ptr++]=v; path[ptr++]=u; return; } dfs(v,u,to); if (ptr && path[ptr-1]==v) { path[ptr++]=u; return; } } } void solve() { int n; cin>>n; //if (n>5000) exit(0); forn(i,n-1) { int u,v; cin>>u>>v; adj[u].push_back(v); adj[v].push_back(u); } for (int i=0; i<=5000; ++i) { path[i]=0; } int K; cin>>K; forn(q,K) { int u,v; cin>>u>>v; ptr=0; dfs(u,0,v); for (int l=0, r=ptr-1; l<r; ++l, --r) { swap(path[l],path[r]); } for (int i=0; i<ptr; ++i) { for (int j=0; j*ptr+i<5000; ++j) cnt[path[i]][j*ptr+i]++; } } int Q; cin>>Q; forn(QQ,Q) { int q; cin>>q; if (q==1) { int u,v; cin>>u>>v; ptr=0; dfs(u,0,v); for (int l=0, r=ptr-1; l<r; ++l, --r) { swap(path[l],path[r]); } for (int i=0; i<ptr; ++i) { for (int j=0; j*ptr+i<5000; ++j) cnt[path[i]][j*ptr+i]++; } } else if (q==2) { int u,v; cin>>u>>v; ptr=0; dfs(u,0,v); for (int l=0, r=ptr-1; l<r; ++l, --r) { swap(path[l],path[r]); } for (int i=0; i<ptr; ++i) { for (int j=0; j*ptr+i<5000; ++j) cnt[path[i]][j*ptr+i]--; } } else { int u,v; cin>>u>>v; ptr=0; dfs(u,0,v); for (int l=0, r=ptr-1; l<r; ++l, --r) { swap(path[l],path[r]); } int ans=0; int l,r; cin>>l>>r; for (int i=0; i<ptr; ++i) { for (int j=l; j<=r; ++j) ans+=cnt[path[i]][j]; } cout<<ans<<'\n'; } } } int32_t main() { solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...