結果
問題 | No.92 逃走経路 |
ユーザー |
|
提出日時 | 2016-04-23 14:07:35 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 17 ms / 5,000 ms |
コード長 | 2,472 bytes |
コンパイル時間 | 1,209 ms |
コンパイル使用メモリ | 89,436 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-10-11 00:02:51 |
合計ジャッジ時間 | 2,268 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 18 |
ソースコード
#include <iostream>#include <vector>#include <utility>#include <queue>#include <algorithm>#define SHOW(d) {std::cout<<#d<<"\t:"<<d<<"\n";}#define SHOWTOWN(t) {\for(size_t i=0;i<t.size();++i){\std::cout<<i<<":\n";\for(size_t j=0;j<t[i].size();++j){\std::cout<<"\t("<<t[i][j].first<<", "<<t[i][j].second<<")\n";\}\}\}#define SHOWQUEUE(a) {\auto t = a.front();\std::queue<decltype(t)> tmp(a);\std::cout << #a << "\t:";\for(size_t i=0; i<a.size(); ++i){\std::cout << tmp.front() << " ";\tmp.pop();\}\std::cout << "\n";\}class Comp{private:int mValue;public:Comp(int v) : mValue(v){}bool operator()(const std::pair<int, int>& t) const{return mValue==t.second;}};int main(){std::ios::sync_with_stdio(false);std::cin.tie(0);int n, m, k;std::cin >> n >> m >> k;std::vector<std::vector<std::pair<int, int>>> town(n);for(int i=0; i<m; ++i){int a, b, c;std::cin >> a >> b >> c;town[a-1].push_back(std::make_pair(b-1, c));town[b-1].push_back(std::make_pair(a-1, c));}//SHOWTOWN(town);std::queue<int> searchQueue;for(int i=0; i<n; ++i){searchQueue.push(i);}for(int i=0; i<k; ++i){int d;std::cin >> d;std::vector<bool> existF(n, false);int queueSize = searchQueue.size();for(int j=0; j<queueSize; ++j){int searchNum = searchQueue.front(); searchQueue.pop();std::vector<std::pair<int, int>> t(town[searchNum]);int searchStartNum = 0;while(true){auto it = std::find_if(t.begin()+searchStartNum, t.end(), Comp(d));if(it==t.end()) break;if(!existF[it->first]){existF[it->first] = true;searchQueue.push(it->first);}searchStartNum = it-t.begin()+1;}}//SHOW(i);//SHOWQUEUE(searchQueue);}int searchQueueNum = searchQueue.size();std::vector<int> ans(searchQueueNum);for(int i=0; i<searchQueueNum; ++i){ans[i]=searchQueue.front(); searchQueue.pop();}std::sort(ans.begin(), ans.end());std::cout << searchQueueNum << "\n";for(auto i : ans){std::cout << i+1 << " ";}std::cout << "\n";return 0;}