제출 #249226

#제출 시각아이디문제언어결과실행 시간메모리
249226rdd6584Jakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
1092 ms72952 KiB
#include <bits/stdc++.h>
using namespace std;
typedef pair<int ,int> pii;

char visit[30000];
map<int,int> dist[30000];
vector<int> v[30000];

int main() {
    int n, m;
    scanf("%d %d", &n, &m);

    int st, ed;
    for (int i = 0; i < m; i++) {
        int a,b;
        scanf("%d %d" ,&a, &b);
        v[a].push_back(b);
        if (i==0) st = a;
        else if (i==1) ed = a;
    }

    queue<pii> q;
    for (int i : v[st]) dist[st][i] = 0, q.push({st, i});

    while (!q.empty()) {
        pii tv = q.front();
        q.pop();

        if (tv.first == ed) return !printf("%d", dist[tv.first][tv.second]);

        int ne = tv.first-tv.second;
        int me = dist[tv.first][tv.second];

        if (ne >= 0) {
            if (dist[ne].find(tv.second) == dist[ne].end()) {
                int flag = 0;
                if (!visit[ne]) {
                    visit[ne] = 1;
                    for (int i : v[ne]) {
                        dist[ne][i] = me+1;
                        q.push({ne, i});
                        flag |= i==tv.second;
                    }
                }
                if (!flag) {
                    q.push({ne, tv.second});
                    dist[ne][tv.second] = me + 1;
                }
            }
        }

        ne = tv.first+tv.second;
        if (ne < n) {
            if (dist[ne].find(tv.second) == dist[ne].end()) {
                int flag = 0;
                if (!visit[ne]) {
                    visit[ne] = 1;
                    for (int i : v[ne]) {
                        dist[ne][i] = me+1;
                        q.push({ne, i});
                        flag |= i==tv.second;
                    }
                }
                if (!flag) {
                    q.push({ne, tv.second});
                    dist[ne][tv.second] = me + 1;
                }
            }
        }
    }
    printf("-1");
}

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

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:11:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d", &n, &m);
     ~~~~~^~~~~~~~~~~~~~~~~
skyscraper.cpp:16:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d" ,&a, &b);
         ~~~~~^~~~~~~~~~~~~~~~~
skyscraper.cpp:13:9: warning: 'st' may be used uninitialized in this function [-Wmaybe-uninitialized]
     int st, ed;
         ^~
skyscraper.cpp:29:9: warning: 'ed' may be used uninitialized in this function [-Wmaybe-uninitialized]
         if (tv.first == ed) return !printf("%d", dist[tv.first][tv.second]);
         ^~
#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...