結果
問題 | No.1382 Travel in Mitaru city |
ユーザー |
![]() |
提出日時 | 2021-02-08 15:52:36 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 73 ms / 2,000 ms |
コード長 | 1,430 bytes |
コンパイル時間 | 921 ms |
コンパイル使用メモリ | 101,868 KB |
実行使用メモリ | 10,500 KB |
最終ジャッジ日時 | 2024-07-05 18:17:39 |
合計ジャッジ時間 | 7,391 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 68 |
ソースコード
/* -*- coding: utf-8 -*-** 1382.cc: No.1382 Travel in Mitaru city - yukicoder*/#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<iostream>#include<string>#include<vector>#include<map>#include<set>#include<stack>#include<list>#include<queue>#include<deque>#include<algorithm>#include<numeric>#include<utility>#include<complex>#include<functional>using namespace std;/* constant */const int MAX_N = 100000;/* typedef */typedef pair<int,int> pii;typedef vector<int> vi;/* global variables */int ps[MAX_N];vi nbrs[MAX_N];bool used[MAX_N];/* subroutines *//* main */int main() {int n, m, st, gl;scanf("%d%d%d%d", &n, &m, &st, &gl);st--, gl--;for (int i = 0; i < n; i++) scanf("%d", ps + i);for (int i = 0; i < m; i++) {int a, b;scanf("%d%d", &a, &b);a--, b--;nbrs[a].push_back(b);nbrs[b].push_back(a);}int x = ps[st], y = 0;used[st] = true;priority_queue<pii> q;q.push(pii(ps[st], st));while (! q.empty()) {pii u = q.top(); q.pop();int up = u.first, ui = u.second;//printf("u=(%d,%d), x=%d, y=%d\n", up, ui, x, y);if (x > up) x = up, y++;vi &nbru = nbrs[ui];for (vi::iterator vit = nbru.begin(); vit != nbru.end(); vit++) {int v = *vit;if (! used[v]) {used[v] = true;q.push(pii(ps[v], v));}}}printf("%d\n", y);return 0;}