제출 #1095971

#제출 시각아이디문제언어결과실행 시간메모리
1095971mohammad86Bitaro’s Party (JOI18_bitaro)C++17
14 / 100
184 ms18248 KiB
// https://oj.uz/problem/view/JOI18_bitaro #include <bits/stdc++.h> using namespace std; typedef pair<int, int> pii; const int maxn = 1e5 + 100; const int sqrtn = 250; const int inf = 1e9; int n, m, q; vector<int> adj[maxn]; vector<int> readj[maxn]; vector<pii> fv[maxn]; int pointer[maxn]; int dis[maxn]; bool mark[maxn]; bool mark2[maxn]; int main () { ios_base::sync_with_stdio(false); cin >> n >> m >> q; for (int i = 1; i <= m; i++) { int s, e; cin >> s >> e; adj[s].push_back(e); readj[e].push_back(s); } vector<int> tmp1; for (int i = 1; i <= n; i++) { tmp1.clear(); for (int w = 0; w < sqrtn; w++) { int maximum = -1; int v = -1; int nv = -1; for (int j : readj[i]) { if (fv[j].size() > pointer[j] && !mark2[fv[j][pointer[j]].second]) { if (fv[j][pointer[j]].first +1 > maximum) { maximum = fv[j][pointer[j]].first +1; v = fv[j][pointer[j]].second; nv = j; } } } if (v == -1) break; mark2[v] = true; tmp1.push_back(v); fv[i].push_back({maximum, v}); pointer[nv]++; } for (int j : readj[i]) pointer[j] = 0; for (int j : tmp1) { mark[j] = false; } fv[i].push_back({0, i}); } vector<int> tmp; for (int _ = 1; _ <= q; _++) { int t, y; cin >> t >> y; tmp.clear(); for (int i = 0; i < y; i++) { int c; cin >> c; tmp.push_back(c); mark[c] = true; } if (y < sqrtn) { bool is_find = false; for (pii i : fv[t]) { if (!mark[i.second]) { cout << i.first << endl; is_find = true; break; } } if (!is_find) { cout << -1 << endl; } } else { fill(dis, dis+n+2, -1 * inf); dis[t] = 0; for (int i = t; i >= 1; i--) { for (int j : readj[i]) { dis[j] = max(dis[j], dis[i]+1); } } int ans = -1; for (int i= 1; i <= t; i++) { if (!mark[i]) { ans = max(ans, dis[i]); } } cout << ans << endl; } for (int i = 0; i < y; i++) { mark[tmp[i]] = false; } } }

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

bitaro.cpp: In function 'int main()':
bitaro.cpp:40:34: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   40 |                 if (fv[j].size() > pointer[j] && !mark2[fv[j][pointer[j]].second]) {
      |                     ~~~~~~~~~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...