답안 #301675

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
301675 2020-09-18T05:56:04 Z Nodir_Bobiev Aesthetic (NOI20_aesthetic) C++17
100 / 100
835 ms 83668 KB
    #include <cstdio>
    #include <queue>
    #include <cstring>
    #define pii pair<long long, int>
    using namespace std;
     
    int N, M;
    vector<pii> adj[300005];
    priority_queue<pii, vector<pii>, greater<pii>> pq;
    long long dist[2][300005];
    int U[300005], V[300005];
    bool can[300005], ada[300005];
    long long W[300005], best[300005];
    vector<pair<int, int>> adj2[300005];
    int disc[300005], low[300005], waktu, need;
    long long p1[300005], p2[300005], pp1[300005], pp2[300005];
    bool ok;
     
    void BFS(int id, int st) {
      memset(ada, 0, sizeof(ada));
      pq.emplace(0LL, st);
      dist[id][st] = 0;
      int u, v;
      long long len, w;
      while(!pq.empty()) {
        u = pq.top().second;
        len = pq.top().first;
        pq.pop();
        if(len != dist[id][u]) continue;
        for(pii now : adj[u]) {
          v = now.second;
          w = now.first;
          if(dist[id][v] > len + w) {
            dist[id][v] = len + w;
            pq.emplace(dist[id][v], v);
          }
        }
      }
    }
     
    void DFS(int u, int p) {
      disc[u] = low[u] = ++waktu;
      int v, id;
      for(pair<int, int> now : adj2[u]) {
        id = now.second;
        if(ada[id] == 0) continue;
        v = now.first; 
        if(disc[v] <= need) {
          DFS(v, u);
          if(low[v] > disc[u] && can[id] && disc[N] >= disc[v]) {
            ok = 1;
          }else low[u] = min(low[u], low[v]);
        }else if(p != v) {
          low[u] = min(low[u], disc[v]);
        }
      }
    }
     
    bool check(long long now) {
      ok = 0;
      need = waktu;
      for(int i = 1; i <= M; i++) {
        if(p1[i] > now && p2[i] > now) ada[i] = 0;
        else ada[i] = 1;
        if(pp1[i] > now && pp2[i] > now) can[i] = 1;
        else can[i] = 0;
      }
      DFS(1, 0);
      if(disc[N] <= need) return 1;
      if(ok) return 1;
      return 0;
    }
     
    int main() {
      memset(dist, 0x3f3f3f3f, sizeof(dist));
      scanf("%d %d", &N, &M);
      int u, v;
      long long w;
      for(int i = 1; i <= M; i++) {
        scanf("%d %d %lld", &u, &v, &w);
        U[i] = u, V[i] = v, W[i] = w;
        adj[u].emplace_back(w, v);
        adj[v].emplace_back(w, u);
        adj2[u].emplace_back(v, i);
        adj2[v].emplace_back(u, i);
      }
      for(int i = M - 1; i > 0; i--) {
        best[i] = max(best[i + 1], W[i + 1]);
      }
      BFS(0, 1);
      BFS(1, N);
      for(int i = 1; i <= M; i++) {
        p1[i] = dist[0][U[i]] + W[i] + dist[1][V[i]];
        p2[i] = dist[0][V[i]] + W[i] + dist[1][U[i]];
        pp1[i] = dist[0][U[i]] + best[i] + W[i] + dist[1][V[i]];
        pp2[i] = dist[0][V[i]] + best[i] + W[i] + dist[1][U[i]];
      }
      long long l = dist[0][N], r = dist[0][N] + best[1], res = dist[0][N], mid;
      while(l <= r) {
        mid = (l + r) >> 1;
        if(check(mid)) {
          l = mid + 1;
          res = l;
        }else r = mid - 1;
      }
      printf("%lld\n", res);
    }

Compilation message

Aesthetic.cpp: In function 'int main()':
Aesthetic.cpp:76:12: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   76 |       scanf("%d %d", &N, &M);
      |       ~~~~~^~~~~~~~~~~~~~~~~
Aesthetic.cpp:80:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   80 |         scanf("%d %d %lld", &u, &v, &w);
      |         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 19456 KB Output is correct
2 Correct 13 ms 19584 KB Output is correct
3 Correct 13 ms 19456 KB Output is correct
4 Correct 13 ms 19456 KB Output is correct
5 Correct 13 ms 19456 KB Output is correct
6 Correct 13 ms 19456 KB Output is correct
7 Correct 13 ms 19456 KB Output is correct
8 Correct 13 ms 19584 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 19456 KB Output is correct
2 Correct 13 ms 19584 KB Output is correct
3 Correct 13 ms 19456 KB Output is correct
4 Correct 13 ms 19456 KB Output is correct
5 Correct 13 ms 19456 KB Output is correct
6 Correct 13 ms 19456 KB Output is correct
7 Correct 13 ms 19456 KB Output is correct
8 Correct 13 ms 19584 KB Output is correct
9 Correct 15 ms 19840 KB Output is correct
10 Correct 15 ms 19840 KB Output is correct
11 Correct 15 ms 19840 KB Output is correct
12 Correct 15 ms 19840 KB Output is correct
13 Correct 14 ms 19840 KB Output is correct
14 Correct 14 ms 19840 KB Output is correct
15 Correct 14 ms 19840 KB Output is correct
16 Correct 14 ms 19840 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 812 ms 72056 KB Output is correct
2 Correct 749 ms 72156 KB Output is correct
3 Correct 762 ms 71620 KB Output is correct
4 Correct 767 ms 71704 KB Output is correct
5 Correct 798 ms 71956 KB Output is correct
6 Correct 835 ms 73152 KB Output is correct
7 Correct 796 ms 72700 KB Output is correct
8 Correct 768 ms 73276 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 834 ms 73048 KB Output is correct
2 Correct 797 ms 72304 KB Output is correct
3 Correct 787 ms 71544 KB Output is correct
4 Correct 751 ms 71672 KB Output is correct
5 Correct 776 ms 72056 KB Output is correct
6 Correct 780 ms 72184 KB Output is correct
7 Correct 780 ms 72184 KB Output is correct
8 Correct 796 ms 72544 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 626 ms 67560 KB Output is correct
2 Correct 300 ms 65656 KB Output is correct
3 Correct 428 ms 71288 KB Output is correct
4 Correct 434 ms 71292 KB Output is correct
5 Correct 430 ms 71288 KB Output is correct
6 Correct 429 ms 71672 KB Output is correct
7 Correct 441 ms 71288 KB Output is correct
8 Correct 448 ms 71672 KB Output is correct
9 Correct 432 ms 71416 KB Output is correct
10 Correct 437 ms 71800 KB Output is correct
11 Correct 442 ms 71672 KB Output is correct
12 Correct 626 ms 67692 KB Output is correct
13 Correct 437 ms 71544 KB Output is correct
14 Correct 237 ms 82680 KB Output is correct
15 Correct 233 ms 82808 KB Output is correct
16 Correct 633 ms 68456 KB Output is correct
17 Correct 602 ms 67184 KB Output is correct
18 Correct 611 ms 67568 KB Output is correct
19 Correct 290 ms 65612 KB Output is correct
20 Correct 300 ms 65528 KB Output is correct
21 Correct 295 ms 65656 KB Output is correct
22 Correct 299 ms 65676 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 626 ms 67560 KB Output is correct
2 Correct 300 ms 65656 KB Output is correct
3 Correct 428 ms 71288 KB Output is correct
4 Correct 434 ms 71292 KB Output is correct
5 Correct 430 ms 71288 KB Output is correct
6 Correct 429 ms 71672 KB Output is correct
7 Correct 441 ms 71288 KB Output is correct
8 Correct 448 ms 71672 KB Output is correct
9 Correct 432 ms 71416 KB Output is correct
10 Correct 437 ms 71800 KB Output is correct
11 Correct 442 ms 71672 KB Output is correct
12 Correct 626 ms 67692 KB Output is correct
13 Correct 437 ms 71544 KB Output is correct
14 Correct 237 ms 82680 KB Output is correct
15 Correct 233 ms 82808 KB Output is correct
16 Correct 633 ms 68456 KB Output is correct
17 Correct 602 ms 67184 KB Output is correct
18 Correct 611 ms 67568 KB Output is correct
19 Correct 290 ms 65612 KB Output is correct
20 Correct 300 ms 65528 KB Output is correct
21 Correct 295 ms 65656 KB Output is correct
22 Correct 299 ms 65676 KB Output is correct
23 Correct 689 ms 69220 KB Output is correct
24 Correct 354 ms 65792 KB Output is correct
25 Correct 438 ms 67448 KB Output is correct
26 Correct 429 ms 66680 KB Output is correct
27 Correct 431 ms 66680 KB Output is correct
28 Correct 437 ms 67832 KB Output is correct
29 Correct 439 ms 66916 KB Output is correct
30 Correct 430 ms 67196 KB Output is correct
31 Correct 442 ms 67712 KB Output is correct
32 Correct 445 ms 67064 KB Output is correct
33 Correct 438 ms 67704 KB Output is correct
34 Correct 709 ms 68236 KB Output is correct
35 Correct 441 ms 67576 KB Output is correct
36 Correct 254 ms 82132 KB Output is correct
37 Correct 255 ms 82936 KB Output is correct
38 Correct 675 ms 68460 KB Output is correct
39 Correct 668 ms 67812 KB Output is correct
40 Correct 674 ms 69096 KB Output is correct
41 Correct 356 ms 65528 KB Output is correct
42 Correct 369 ms 65656 KB Output is correct
43 Correct 357 ms 65784 KB Output is correct
44 Correct 363 ms 65528 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 19456 KB Output is correct
2 Correct 13 ms 19584 KB Output is correct
3 Correct 13 ms 19456 KB Output is correct
4 Correct 13 ms 19456 KB Output is correct
5 Correct 13 ms 19456 KB Output is correct
6 Correct 13 ms 19456 KB Output is correct
7 Correct 13 ms 19456 KB Output is correct
8 Correct 13 ms 19584 KB Output is correct
9 Correct 15 ms 19840 KB Output is correct
10 Correct 15 ms 19840 KB Output is correct
11 Correct 15 ms 19840 KB Output is correct
12 Correct 15 ms 19840 KB Output is correct
13 Correct 14 ms 19840 KB Output is correct
14 Correct 14 ms 19840 KB Output is correct
15 Correct 14 ms 19840 KB Output is correct
16 Correct 14 ms 19840 KB Output is correct
17 Correct 812 ms 72056 KB Output is correct
18 Correct 749 ms 72156 KB Output is correct
19 Correct 762 ms 71620 KB Output is correct
20 Correct 767 ms 71704 KB Output is correct
21 Correct 798 ms 71956 KB Output is correct
22 Correct 835 ms 73152 KB Output is correct
23 Correct 796 ms 72700 KB Output is correct
24 Correct 768 ms 73276 KB Output is correct
25 Correct 834 ms 73048 KB Output is correct
26 Correct 797 ms 72304 KB Output is correct
27 Correct 787 ms 71544 KB Output is correct
28 Correct 751 ms 71672 KB Output is correct
29 Correct 776 ms 72056 KB Output is correct
30 Correct 780 ms 72184 KB Output is correct
31 Correct 780 ms 72184 KB Output is correct
32 Correct 796 ms 72544 KB Output is correct
33 Correct 626 ms 67560 KB Output is correct
34 Correct 300 ms 65656 KB Output is correct
35 Correct 428 ms 71288 KB Output is correct
36 Correct 434 ms 71292 KB Output is correct
37 Correct 430 ms 71288 KB Output is correct
38 Correct 429 ms 71672 KB Output is correct
39 Correct 441 ms 71288 KB Output is correct
40 Correct 448 ms 71672 KB Output is correct
41 Correct 432 ms 71416 KB Output is correct
42 Correct 437 ms 71800 KB Output is correct
43 Correct 442 ms 71672 KB Output is correct
44 Correct 626 ms 67692 KB Output is correct
45 Correct 437 ms 71544 KB Output is correct
46 Correct 237 ms 82680 KB Output is correct
47 Correct 233 ms 82808 KB Output is correct
48 Correct 633 ms 68456 KB Output is correct
49 Correct 602 ms 67184 KB Output is correct
50 Correct 611 ms 67568 KB Output is correct
51 Correct 290 ms 65612 KB Output is correct
52 Correct 300 ms 65528 KB Output is correct
53 Correct 295 ms 65656 KB Output is correct
54 Correct 299 ms 65676 KB Output is correct
55 Correct 689 ms 69220 KB Output is correct
56 Correct 354 ms 65792 KB Output is correct
57 Correct 438 ms 67448 KB Output is correct
58 Correct 429 ms 66680 KB Output is correct
59 Correct 431 ms 66680 KB Output is correct
60 Correct 437 ms 67832 KB Output is correct
61 Correct 439 ms 66916 KB Output is correct
62 Correct 430 ms 67196 KB Output is correct
63 Correct 442 ms 67712 KB Output is correct
64 Correct 445 ms 67064 KB Output is correct
65 Correct 438 ms 67704 KB Output is correct
66 Correct 709 ms 68236 KB Output is correct
67 Correct 441 ms 67576 KB Output is correct
68 Correct 254 ms 82132 KB Output is correct
69 Correct 255 ms 82936 KB Output is correct
70 Correct 675 ms 68460 KB Output is correct
71 Correct 668 ms 67812 KB Output is correct
72 Correct 674 ms 69096 KB Output is correct
73 Correct 356 ms 65528 KB Output is correct
74 Correct 369 ms 65656 KB Output is correct
75 Correct 357 ms 65784 KB Output is correct
76 Correct 363 ms 65528 KB Output is correct
77 Correct 732 ms 71704 KB Output is correct
78 Correct 576 ms 67960 KB Output is correct
79 Correct 542 ms 73720 KB Output is correct
80 Correct 567 ms 73720 KB Output is correct
81 Correct 553 ms 73720 KB Output is correct
82 Correct 546 ms 73464 KB Output is correct
83 Correct 544 ms 74104 KB Output is correct
84 Correct 547 ms 74360 KB Output is correct
85 Correct 541 ms 73596 KB Output is correct
86 Correct 558 ms 73848 KB Output is correct
87 Correct 569 ms 74124 KB Output is correct
88 Correct 714 ms 70676 KB Output is correct
89 Correct 560 ms 74104 KB Output is correct
90 Correct 356 ms 83028 KB Output is correct
91 Correct 352 ms 83668 KB Output is correct
92 Correct 744 ms 71068 KB Output is correct
93 Correct 722 ms 70376 KB Output is correct
94 Correct 715 ms 69480 KB Output is correct
95 Correct 562 ms 67960 KB Output is correct
96 Correct 565 ms 67960 KB Output is correct
97 Correct 571 ms 67960 KB Output is correct
98 Correct 570 ms 67892 KB Output is correct