#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; class Edge { public: int to, cost; Edge(int to0, int cost0){ to = to0; cost = cost0; } }; vector > memo; vector solve(int curr, const vector >& edges) { int n = edges.size(); vector ret(n, 0); if(edges[curr].size() == 0){ ret[curr] = 1; return ret; } if(!memo[curr].empty()) return memo[curr]; for(unsigned i=0; i v = solve(edges[curr][i].to, edges); for(int j=0; j> n >> m; vector > edges(n); for(int i=0; i> p >> q >> r; -- p; -- r; edges[r].push_back(Edge(p, q)); } memo.assign(n, vector()); vector ret = solve(n-1, edges); for(int i=0; i