Submission #252341

#TimeUsernameProblemLanguageResultExecution timeMemory
252341IgorISynchronization (JOI13_synchronization)C++17
40 / 100
8073 ms26792 KiB
const int LG = 21; const int N = 200005; const long long MOD = 1e9 + 7; const long long INF = 1e9; const long long INFLL = 1e18; #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; typedef vector<int> vi; typedef vector<vector<int> > vvi; typedef vector<ll> vll; #define forn(i, n) for (int (i) = 0; (i) != (n); (i)++) #define all(v) (v).begin(), (v).end() #define rall(v) (v).rbegin(), (v).rend() #define popcount(x) __builtin_popcount(x) #define popcountll(x) __builtin_popcountll(x) #define fi first #define se second #define re return #define pb push_back #define uniq(x) sort(all(x)); (x).resize(unique(all(x)) - (x).begin()) #ifdef LOCAL #define dbg(x) cerr << __LINE__ << " " << #x << " " << x << endl #define ln cerr << __LINE__ << endl #else #define dbg(x) void(0) #define ln void(0) #endif // LOCAL int dfs(int v, int p, int t, vvi &graph, vi &x, vi &y, vector<vector<pii> > &act) { int res = 1; for (auto i : graph[v]) { int u = x[i] + y[i] - v; if (u != p) { int L = -1, R = act[i].size(); while (L + 1 < R) { int M = (L + R) / 2; if (act[i][M].first <= t) L = M; else R = M; } if (L == -1) continue; int T = min(act[i][L].second, t); res += dfs(u, v, T, graph, x, y, act); } } return res; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, m, q; cin >> n >> m >> q; vector<int> x(n - 1), y(n - 1); vector<vector<int> > graph(n); for (int i = 0; i < n - 1; i++) { cin >> x[i] >> y[i]; x[i]--, y[i]--; graph[x[i]].push_back(i); graph[y[i]].push_back(i); } vector<int> fr(n - 1, -1); vector<vector<pii> > act(n - 1); for (int i = 0; i < m; i++) { int z; cin >> z; z--; if (fr[z] == -1) { fr[z] = i; } else { act[z].push_back({fr[z], i}); fr[z] = -1; } } for (int i = 0; i < n - 1; i++) { if (fr[i] != -1) { act[i].push_back({fr[i], m}); } } for (int i = 0; i < q; i++) { int v; cin >> v; v--; cout << dfs(v, v, m, graph, x, y, act) << "\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...