結果
問題 | No.92 逃走経路 |
ユーザー |
![]() |
提出日時 | 2015-06-21 14:20:21 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 225 ms / 5,000 ms |
コード長 | 1,451 bytes |
コンパイル時間 | 848 ms |
コンパイル使用メモリ | 93,680 KB |
実行使用メモリ | 9,728 KB |
最終ジャッジ日時 | 2024-07-07 15:46:31 |
合計ジャッジ時間 | 2,418 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 18 |
ソースコード
#include <algorithm>#include <cstdio>#include <cstdlib>#include <cctype>#include <cmath>#include <iostream>#include <queue>#include <list>#include <map>#include <numeric>#include <set>#include <sstream>#include <string>#include <vector>using namespace std;#define REP(i,a,n) for(int i=(a); i<(int)(n); i++)#define rep(i,n) REP(i,0,n)#define FOR(it,c) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it)#define ALLOF(c) (c).begin(), (c).end()typedef long long ll;int N, M, K;vector< pair<int,int> > G[105];map<pair<int,int>,bool> memo;bool solve(int x, int idx, const vector<int>& v){if(idx >= v.size()) return true;if(memo.count(make_pair(x,idx)) > 0) return memo[make_pair(x,idx)];bool flg = false;rep(i,G[x].size()){if(G[x][i].first == v[idx]){if(solve(G[x][i].second, idx+1, v)){flg = true;}}}return memo[make_pair(x,idx)] = flg;}int main(){cin >> N >> M >> K;rep(i,M){int a, b, c;cin >> a >> b >> c;a--;b--;G[a].push_back(make_pair(c,b));G[b].push_back(make_pair(c,a));}vector<int> v;rep(i,K){int a;cin >> a;v.push_back(a);}reverse(ALLOF(v));vector<int> ret;rep(i,N){if(solve(i, 0, v)){ret.push_back(i+1);}}cout << ret.size() << endl;rep(i,ret.size()){if(i!=0) cout << " ";cout << ret[i];}if(ret.size()!=0) cout << endl;return 0;}