結果
問題 | 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; }