#include #include #include #include #include #include #include #include #include using namespace std; struct edge{ int to; int cost; }; vector > memo; bool dfs( vector > &G, vector &d, int pos, int x){ if(memo[pos][x] >= 0) return memo[pos][x] == 1; if( x==0 ){ return true; } bool ret = false; for(int i=0; i> N >> M >> K; vector< vector > G(N); for(int i=0; i> a >> b >> c; a--; b--; G[a].push_back( (edge){b, c} ); G[b].push_back( (edge){a, c} ); } vector d(K); for(int i=0; i> d[i]; memo = vector >(N, vector(K+1, -1) ); vector ans; for(int i=0; i