제출 #333429

#제출 시각아이디문제언어결과실행 시간메모리
333429SHZhang통행료 (IOI18_highway)C++14
90 / 100
315 ms12840 KiB
#include <cstdio> #include <utility> #include <vector> #include <queue> #include "highway.h" using namespace std; #define ll long long vector<pair<int, int> > graph[150000]; int n, m; ll mindis; void bfs(int node, vector<pair<int, int> >& seq) { queue<int> que; que.push(node); vector<int> dist(n); for (int i = 0; i < n; i++) dist[i] = 100000000; dist[node] = 0; seq.push_back(make_pair(node, -1)); while (!que.empty()) { int cur = que.front(); que.pop(); for (int i = 0; i < graph[cur].size(); i++) { int nxt = graph[cur][i].first; if (dist[cur] + 1 < dist[nxt]) { dist[nxt] = dist[cur] + 1; que.push(nxt); seq.push_back(make_pair(nxt, graph[cur][i].second)); } } } } int binary_search(vector<pair<int, int> >& seq) { int l = 0; int r = n - 1; while (l < r) { vector<int> wt(m); for (int i = 0; i < m; i++) wt[i] = 1; int mid = (l + r) / 2; for (int i = 1; i <= mid; i++) { wt[seq[i].second] = 0; } ll dis = ask(wt); if (dis == mindis) { r = mid; } else { l = mid + 1; } } return seq[l].first; } void find_pair(int N, std::vector<int> U, std::vector<int> V, int A, int B) { n = N; m = U.size(); for (int i = 0; i < m; i++) { graph[U[i]].push_back(make_pair(V[i], i)); graph[V[i]].push_back(make_pair(U[i], i)); } int l = 0; int r = n - 1; vector<int> wt(m); for (int i = 0; i < m; i++) wt[i] = 0; mindis = ask(wt); //fprintf(stderr, "here1"); while (l < r) { vector<int> wt(m); for (int i = 0; i < m; i++) wt[i] = 0; int mid = (l + r) / 2; for (int i = 0; i <= mid; i++) { for (int j = 0; j < graph[i].size(); j++) { wt[graph[i][j].second] = 1; } } ll dis = ask(wt); if (dis == mindis) { l = mid + 1; } else { r = mid; } } //fprintf(stderr, "here"); int midnode = l; vector<pair<int, int> > seq; bfs(midnode, seq); int S = binary_search(seq); seq.clear(); bfs(S, seq); int T = binary_search(seq); answer(S, T); }

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

highway.cpp: In function 'void bfs(int, std::vector<std::pair<int, int> >&)':
highway.cpp:24:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   24 |         for (int i = 0; i < graph[cur].size(); i++) {
      |                         ~~^~~~~~~~~~~~~~~~~~~
highway.cpp: In function 'void find_pair(int, std::vector<int>, std::vector<int>, int, int)':
highway.cpp:70:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   70 |             for (int j = 0; j < graph[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...