제출 #898121

#제출 시각아이디문제언어결과실행 시간메모리
898121vjudge1Tourism (JOI23_tourism)C++17
0 / 100
966 ms1048576 KiB
#pragma GCC optimize("unroll-loops") #pragma gcc optimize("Ofast") #pragma GCC optimization("Ofast") #pragma optimize(Ofast) #include <bits/stdc++.h> using namespace std; #define int long long #define str string #define fastio ios::sync_with_stdio(0), cin.tie(0); #define fs first #define ss second #define endl '\n' #define all(x) (x).begin(), (x).end() #define len(x) x.size() #define print(a) \ for (auto &x : a) \ cout << x << " "; \ cout << endl; #define printmp(a) \ for (auto &x : a) \ cout << x.fs << " " << x.ss << endl; const int mod = 998244353; struct Lowest_Common_Ancestor { vector<vector<int>> LCA; vector<int> Degree; void dfs(int u, int p, vector<vector<int>> &tree) { LCA[u][0] = p; for (auto &x : tree[u]) { if (x != p) { Degree[x] = Degree[u] + 1; dfs(x, u, tree); } } } Lowest_Common_Ancestor(vector<vector<int>> &tree) { LCA.resize(tree.size(), vector<int>((int)(log2(tree.size())) + 1)); Degree.resize(tree.size(), 1); dfs(1, -1, tree); for (int i = 1; i <= tree.size() - 1; i++) for (int j = 1; j < LCA[i].size(); j++) if (LCA[i][j - 1] == -1) LCA[i][j] = -1; else LCA[i][j] = LCA[LCA[i][j - 1]][j - 1]; } void binary_shifting(int &X, int k) { for (int i = LCA[X].size(); i >= 0; i--) { if (k >= (1 << i)) { X = LCA[X][i]; k -= (1 << i); } } } int lca(int X, int Y) { if (Degree[X] < Degree[Y]) swap(X, Y); if (Degree[X] != Degree[Y]) binary_shifting(X, Degree[X] - Degree[Y]); int k = LCA[0].size() - 1; while (X != Y) { int l = 0, r = k; while (l < r) { int m = (l + r + 1) >> 1; if (LCA[X][m] == LCA[Y][m]) r = m - 1; else l = m; } X = LCA[X][l]; Y = LCA[Y][l]; k = l; } return X; } }; void solve(){ int n, m, q; cin >> n >> m >> q; vector<vector<int>> tree(n + 1); for(int i = 0; i < m; i ++){ int a, b; cin >> a >> b; tree[a].push_back(b); tree[b].push_back(a); } vector<int> c(m); for(int i = 0; i < m; i ++) cin >> c[i]; Lowest_Common_Ancestor lca(tree); for(int i = 0; i < q; i ++){ int l, r; cin >> l >> r; int p = c[l - 1]; for(int j = l; j < r; j ++) p = lca.lca(p, c[j]); int ans = 0; for(int j = l - 1; j < r; j ++) ans += lca.Degree[c[j]] - lca.Degree[p]; cout << ans << endl; } } signed main() { fastio int t = 1; // cin >> t; while (t--) { solve(); cout << endl; } }

컴파일 시 표준 에러 (stderr) 메시지

tourism.cpp:2: warning: ignoring '#pragma gcc optimize' [-Wunknown-pragmas]
    2 | #pragma gcc optimize("Ofast")
      | 
tourism.cpp:3: warning: ignoring '#pragma GCC optimization' [-Wunknown-pragmas]
    3 | #pragma GCC optimization("Ofast")
      | 
tourism.cpp:4: warning: ignoring '#pragma optimize ' [-Wunknown-pragmas]
    4 | #pragma optimize(Ofast)
      | 
tourism.cpp: In constructor 'Lowest_Common_Ancestor::Lowest_Common_Ancestor(std::vector<std::vector<long long int> >&)':
tourism.cpp:53:27: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |         for (int i = 1; i <= tree.size() - 1; i++)
      |                         ~~^~~~~~~~~~~~~~~~~~
tourism.cpp:54:31: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   54 |             for (int j = 1; j < LCA[i].size(); j++)
      |                             ~~^~~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...