結果
問題 | No.92 逃走経路 |
ユーザー |
![]() |
提出日時 | 2016-03-12 22:38:50 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 34 ms / 5,000 ms |
コード長 | 1,760 bytes |
コンパイル時間 | 1,039 ms |
コンパイル使用メモリ | 95,200 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-25 11:12:35 |
合計ジャッジ時間 | 1,766 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 18 |
ソースコード
/* -*- coding: utf-8 -*-** 92.cc: No.92 逃走経路 - 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 = 100;const int MAX_M = 1000;const int MAX_K = 1000;/* typedef */typedef pair<int,int> pii;typedef vector<pii> vpii;typedef set<int> si;/* global variables */int n, m, k;int as[MAX_M], bs[MAX_M], cs[MAX_M], ds[MAX_K];vpii nbrs[MAX_N];si ps[2];/* subroutines *//* main */int main() {cin >> n >> m >> k;for (int i = 0; i < m; i++) {cin >> as[i] >> bs[i] >> cs[i];as[i]--, bs[i]--;nbrs[as[i]].push_back(pii(bs[i], cs[i]));nbrs[bs[i]].push_back(pii(as[i], cs[i]));}for (int i = 0; i < k; i++) cin >> ds[i];for (int i = 0; i < m; i++)if (cs[i] == ds[0]) {ps[0].insert(as[i]);ps[0].insert(bs[i]);}int cur = 0, nxt = 1;for (int i = 1; i < k; i++) {si &p0 = ps[cur], &p1 = ps[nxt];p1.clear();for (si::iterator sit = p0.begin(); sit != p0.end(); sit++) {vpii& nbru = nbrs[*sit];for (vpii::iterator vit = nbru.begin(); vit != nbru.end(); vit++) {int &v = vit->first, &c = vit->second;if (c == ds[i]) p1.insert(v);}}cur ^= 1, nxt ^= 1;}si &pc = ps[cur];printf("%lu\n", pc.size());bool first = true;for (si::iterator sit = pc.begin(); sit != pc.end(); sit++) {if (! first) putchar(' ');printf("%d", *sit + 1);first = false;}putchar('\n');return 0;}