이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int O = 3e5 + 5;
int n, m, doge[O], p[O], d[O], vis[O];
vector <vector <int>> g;
main(){
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> n >> m; g.resize(n);
for (int i = 0; i < m; ++ i){
cin >> doge[i] >> p[i];
g[doge[i]].push_back(p[i]);
}
deque <tuple <int, int, int>> q;
for (int i = 0; i < n; ++ i) d[i] = 1e18;
d[doge[0]] = 0;
for (int i : g[doge[0]]) q.push_back(make_tuple(0, doge[0], i)), q.push_back(make_tuple(0, doge[0], -i));
while (q.size()){
tuple <int, int, int> u = q.front(); q.pop_front();
if (d[doge[1]] != 1e18) break;
if ((get<1>(u) - doge[1]) % get<2>(u) == 0){
int cnt = 0, v = get<1>(u);
while (v < doge[1]){
v += get<2>(u);
cnt += 1;
}
while (v > doge[1]){
v -= get<2>(u);
cnt += 1;
}
d[doge[1]] = cnt + get<0>(u);
break;
}
if (get<0>(u) != d[get<1>(u)]) break;
int h = get<1>(u) + get<2>(u);
if (h < n && h){
if (d[h] > get<0>(u) + 1){
d[h] = get<0>(u) + 1;
for (int i : g[h]) q.push_back(make_tuple(d[h], h, i)), q.push_back(make_tuple(d[h], h, -i));
q.push_back(make_tuple(d[h], h, get<2>(u)));
}
}
}
if (d[doge[1]] == 1e18) d[doge[1]] = -1;
cout << d[doge[1]];
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
skyscraper.cpp:12:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
12 | main(){
| ^~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |