結果

問題 No.92 逃走経路
ユーザー TatamoTatamo
提出日時 2016-06-22 11:41:12
言語 C++11
(gcc 11.4.0)
結果
WA  
実行時間 -
コード長 1,507 bytes
コンパイル時間 818 ms
コンパイル使用メモリ 84,224 KB
実行使用メモリ 4,508 KB
最終ジャッジ日時 2023-08-01 23:39:09
合計ジャッジ時間 4,779 ms
ジャッジサーバーID
(参考情報)
judge11 / judge13
このコードへのチャレンジ(β)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 RE -
testcase_02 RE -
testcase_03 AC 2 ms
4,376 KB
testcase_04 AC 1 ms
4,380 KB
testcase_05 AC 1,576 ms
4,376 KB
testcase_06 AC 8 ms
4,380 KB
testcase_07 AC 8 ms
4,380 KB
testcase_08 AC 2 ms
4,380 KB
testcase_09 AC 13 ms
4,376 KB
testcase_10 AC 145 ms
4,380 KB
testcase_11 AC 112 ms
4,380 KB
testcase_12 AC 847 ms
4,380 KB
testcase_13 AC 7 ms
4,376 KB
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>
#include <utility>
#include <map>
#include <algorithm>

#define DBG(x) cerr << x << endl

using namespace std;

class Graph{
	public:
		vector<pair<int, int> >edges;
		Graph(){
		}
		void setEdge(int id, int cost){
			edges.push_back(make_pair(id, cost));
		}
};

vector<Graph> g;
vector<int> d;

map<int, Graph> search(){
	int count = 0;
	map<int, Graph> s;
	for(int i=1; i<=g.size(); i++){
		s.insert(map<int, Graph>::value_type(i, g[i]));
	}
	map<int, Graph> s_next;
	for(int c=0; c<d.size(); c++){
		for(auto itr = s.begin(); itr!=s.end(); itr++){
			for(int i=0; i < itr->second.edges.size(); i++){
				int cost = itr->second.edges[i].second;
				if(cost == d[count]){
					int index = itr->second.edges[i].first;
					s_next.insert(map<int, Graph>::value_type(index, g[index]));
				}
			}
		}
		s = s_next;
		s_next.clear();
	}
	return s;
}

int main(){
	int n,m,k;
	cin >> n >> m >> k;

	for(int i=0; i<=n; i++){
		g.push_back(Graph());
	}
	for(int i=0; i<m; i++){
		int a, b, c;
		cin >> a >> b >> c;
		g[a].setEdge(b, c);
		g[b].setEdge(a, c);
	}

	for(int i=0; i<k; i++){
		int tmp;
		cin >> tmp;
		d.push_back(tmp);
	}

/*
	for(int i=0; i<g.size(); i++){
		for(int ii=0; ii<g[i].edges.size(); ii++){
			DBG(g[i].edges[ii].first);
			DBG(g[i].edges[ii].second);
			DBG("");
		}
	}
*/
	map<int, Graph> result = search();
	cout << result.size() << endl;
	for(auto itr=result.begin(); itr!=result.end(); itr++){
		cout << itr->first << " ";
	}
	cout << endl;
}
0