답안 #42362

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
42362 2018-02-26T13:44:48 Z nickyrio 버스 (JOI14_bus) C++14
35 / 100
1000 ms 35244 KB
#include <bits/stdc++.h>
#define FOR(i, a, b) for (int i = a; i<= b; ++i)
#define FORD(i, a, b) for (int i = a; i>=b; --i)
#define REP(i, a) for (int i = 0; i<a; ++i)
#define DEBUG(x) { cerr << #x << " = " << x << endl; }
#define Arr(A, l, r) { cerr << #A  << " = "; FOR(_, l, r) cerr << A[_] << ' '; cerr << endl; }
#define N 1001000
#define pp pair<int, int>
#define next __next
#define prev __prev
#define __builtin_popcount __builtin_popcountll
#define bit(S, i) (((S) >> i) & 1)
#define IO ios::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL);

using namespace std;

struct edge {
    int a, b, x, y;
}g[N];
vector<int> e[N];
int d[N], visited[N];
int n, m;

void Enter() {
  	IO;
    cin >> n >> m;
    REP(i, m) {
        cin >> g[i].a >> g[i].b >> g[i].x >> g[i].y;
        e[g[i].a].push_back(i);
    }
}

void dfs(int u, int isEdge, int MAX, int now) {
    if (isEdge) {
        visited[u] = true;
        d[u] = MAX;
        dfs(g[u].b, 0, MAX, now);
    }
    else {
        for (int id : e[u]) {
            if (visited[id] == false && g[id].x >= now) {
                dfs(id, 1, MAX, g[id].y);
            }
        }
    }
}

vector<pp> res;

void Process() {
    sort(e[1].begin(), e[1].end(), [] (const int &a, const int &b) {
         return g[a].x > g[b].x;
    });
    for (int id : e[1]) {
        if (visited[id] == false) {
            dfs(id, 1, g[id].x, g[id].y);
        }
    }
    REP(i, m) {
        if (g[i].b == n && visited[i]) {
            res.push_back(pp(g[i].y, d[i]));
        }
    }
    sort(res.begin(), res.end());
    REP(i, res.size()) if (i) {
        res[i].second = max(res[i].second, res[i - 1].second);
    }
}

void Query() {
    int q;
    cin >> q;
    REP(i, q) {
        int x;
        cin >> x;
        int pos = upper_bound(res.begin(), res.end(), pp(x + 1, -1)) - res.begin() - 1;
        if (pos < 0) cout << -1 << '\n';
        else cout << res[pos].second << '\n';
    }
}
int main() {
    Enter();
    Process();
    Query();
}

Compilation message

bus.cpp: In function 'void Process()':
bus.cpp:4:36: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 #define REP(i, a) for (int i = 0; i<a; ++i)
                                    ^
bus.cpp:65:5: note: in expansion of macro 'REP'
     REP(i, res.size()) if (i) {
     ^
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 23800 KB Output is correct
2 Correct 20 ms 23904 KB Output is correct
3 Correct 20 ms 23960 KB Output is correct
4 Correct 21 ms 24028 KB Output is correct
5 Correct 23 ms 24100 KB Output is correct
6 Correct 20 ms 24100 KB Output is correct
7 Correct 20 ms 24100 KB Output is correct
8 Correct 21 ms 24100 KB Output is correct
9 Correct 20 ms 24148 KB Output is correct
10 Correct 22 ms 24152 KB Output is correct
11 Correct 24 ms 24156 KB Output is correct
12 Correct 21 ms 24172 KB Output is correct
13 Correct 21 ms 24300 KB Output is correct
14 Correct 22 ms 24300 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 20 ms 24300 KB Output is correct
2 Correct 49 ms 24940 KB Output is correct
3 Correct 50 ms 24940 KB Output is correct
4 Correct 22 ms 24940 KB Output is correct
5 Correct 22 ms 24940 KB Output is correct
6 Correct 22 ms 24940 KB Output is correct
7 Correct 36 ms 24940 KB Output is correct
8 Correct 21 ms 24940 KB Output is correct
9 Correct 38 ms 24940 KB Output is correct
10 Correct 45 ms 24940 KB Output is correct
11 Correct 53 ms 24940 KB Output is correct
12 Correct 50 ms 25116 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 208 ms 34168 KB Output is correct
2 Correct 230 ms 34304 KB Output is correct
3 Correct 203 ms 34304 KB Output is correct
4 Correct 217 ms 34304 KB Output is correct
5 Correct 225 ms 34304 KB Output is correct
6 Correct 208 ms 34608 KB Output is correct
7 Correct 213 ms 34608 KB Output is correct
8 Correct 216 ms 34608 KB Output is correct
9 Correct 206 ms 34700 KB Output is correct
10 Execution timed out 1079 ms 34700 KB Time limit exceeded
11 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 280 ms 34968 KB Output is correct
2 Correct 252 ms 34968 KB Output is correct
3 Correct 221 ms 34968 KB Output is correct
4 Correct 242 ms 34968 KB Output is correct
5 Correct 229 ms 34968 KB Output is correct
6 Correct 238 ms 35100 KB Output is correct
7 Correct 203 ms 35100 KB Output is correct
8 Correct 250 ms 35244 KB Output is correct
9 Correct 250 ms 35244 KB Output is correct
10 Execution timed out 1074 ms 35244 KB Time limit exceeded
11 Halted 0 ms 0 KB -