結果
問題 | No.92 逃走経路 |
ユーザー | satanic |
提出日時 | 2016-04-23 14:07:35 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.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 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 7 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | AC | 2 ms
5,248 KB |
testcase_04 | AC | 2 ms
5,248 KB |
testcase_05 | AC | 15 ms
5,248 KB |
testcase_06 | AC | 4 ms
5,248 KB |
testcase_07 | AC | 5 ms
5,248 KB |
testcase_08 | AC | 2 ms
5,248 KB |
testcase_09 | AC | 6 ms
5,248 KB |
testcase_10 | AC | 15 ms
5,248 KB |
testcase_11 | AC | 14 ms
5,248 KB |
testcase_12 | AC | 17 ms
5,248 KB |
testcase_13 | AC | 4 ms
5,248 KB |
testcase_14 | AC | 6 ms
5,248 KB |
testcase_15 | AC | 7 ms
5,248 KB |
testcase_16 | AC | 6 ms
5,248 KB |
testcase_17 | AC | 7 ms
5,248 KB |
testcase_18 | AC | 6 ms
5,248 KB |
testcase_19 | AC | 5 ms
5,248 KB |
ソースコード
#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; }