結果
問題 | No.1480 Many Complete Graphs |
ユーザー |
![]() |
提出日時 | 2021-04-16 20:30:57 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 207 ms / 2,000 ms |
コード長 | 1,590 bytes |
コンパイル時間 | 1,939 ms |
コンパイル使用メモリ | 182,608 KB |
実行使用メモリ | 32,128 KB |
最終ジャッジ日時 | 2024-07-03 04:07:14 |
合計ジャッジ時間 | 8,237 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 57 |
ソースコード
#include <bits/stdc++.h> using namespace std; int main(){ int N, M; cin >> N >> M; vector<vector<pair<int, int>>> E(N + M * 8); for (int i = 0; i < M; i++){ int k, c; cin >> k >> c; vector<int> s(k); for (int j = 0; j < k; j++){ cin >> s[j]; } int id = N + i * 8; for (int j = 0; j < k; j++){ if (s[j] % 2 == 0){ E[s[j] - 1].push_back(make_pair(s[j] / 2, id)); E[s[j] - 1].push_back(make_pair(s[j] / 2, id + 1)); E[id + 4].push_back(make_pair(s[j] / 2, s[j] - 1)); E[id + 6].push_back(make_pair(s[j] / 2, s[j] - 1)); } if (s[j] % 2 == 1){ E[s[j] - 1].push_back(make_pair(s[j] / 2, id + 2)); E[s[j] - 1].push_back(make_pair(s[j] / 2, id + 3)); E[id + 5].push_back(make_pair(s[j] / 2, s[j] - 1)); E[id + 7].push_back(make_pair(s[j] / 2, s[j] - 1)); } } E[id].push_back(make_pair(c, id + 4)); E[id + 1].push_back(make_pair(c + 1, id + 5)); E[id + 2].push_back(make_pair(c + 1, id + 6)); E[id + 3].push_back(make_pair(c + 1, id + 7)); } int V = N + M * 8; vector<long long> d(V, -1); priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<tuple<long long, int>>> pq; pq.push(make_pair(0, 0)); while (!pq.empty()){ long long dd = pq.top().first; int v = pq.top().second; pq.pop(); if (d[v] == -1){ d[v] = dd; for (auto P : E[v]){ int w = P.second; if (d[w] == -1){ pq.push(make_pair(dd + P.first, w)); } } } } cout << d[N - 1] << endl; }