// Alessandro Guerrieri, fork il 27/2/2014 (Romeo Rizzi) #define NDEBUG // NDEBUG definita nella versione che consegno #include #ifdef NDEBUG #define EVAL #endif #include #include #include using namespace std; const int MAXN = 100000; const int MAXM = 100000; //Ho preferito ridurre rispetto al bound del testo originale per rimanere naturalmente entro lo stack di default sulla mia architettura. struct edge{ int el[2]; bool valid; edge(int a,int b){ el[0]=a; el[1]=b; valid=true; } }; struct elink{ int edge_id; int order; elink(int ed,int ord){ edge_id=ed; order=ord; } }; vector edges; vector > graph; vector path; int N, M, X, Y; void dfs(int el) { for(unsigned int i=0; i> N >> M >> X >> Y; X--; Y--; graph.reserve(N); for(int i=0; i> a >> b; a--; b--; graph[a].push_back( elink(edges.size(),1) ); graph[b].push_back( elink(edges.size(),0) ); edges.push_back( edge(a,b) ); } dfs(Y); assert( (unsigned int)M == path.size()-1 ); for(unsigned int i=0; i