void Graph::shortestPath(int src){ SI s; int dist[V]; bool visit[V]; fill(visit, visit + V, false); fill(dist, dist+V, INT_MAX); for(int i=0; i<V; i++){ if(!visit[i]) topologicalSort(i, visit, s); } dist[src] = 0; while(!s.empty()){ int u = s.top(); s.pop(); LN::iterator iter = adj[u].begin(); while(iter != adj[u].end()){ int v = (*iter).v; if(dist[u] != INT_MAX && dist[v] > dist[u] + (*iter).weight) dist[v] = dist[u] + (*iter).weight; iter++; } } for(int i=0; i<V; i++){ cout<<i<<" "<<dist[i]<<'\n'; } }
int main(){ scanf("%d%d", &noV, &noE); G = VVI(noV+1, VI(0, 0)); RG = VVI(noV+1, VI(0, 0)); ans = VVI(noV+1, VI(0,0)); vis = VB(noV+1, false); for(int i = 0 ; i < noE ; i++){ int u,v; scanf("%d%d", &u, &v); G[u].push_back(v); RG[v].push_back(u); } for(int i = 1 ; i <= noV ; i++){ if(!vis[i]){ vis[i] = true; dfs(i); st.push(i); } } vis = VB(noV+1, false); vInfoAns = VI(noV+1, -1); while(!st.empty()){ int here = st.top(); st.pop(); if(!vis[here]){ vis[here] = true; ans[noAns].push_back(here); vInfoAns[here] = noAns; dfsReverse(here); noAns++; sort(ans[noAns-1].begin(), ans[noAns-1].end()); } } vis = VB(noAns+1, false); printf("%d\n", noAns); for(int i = 1 ; i <= noV ; i++){ int here = vInfoAns[i]; // == noAns if(!vis[here]){ vis[here] = true; for(auto iter = ans[here].begin() ; iter != ans[here].end() ; iter++){ printf("%d ",*iter); } puts("-1"); } } return 0; }
int main(int argc, char const *argv[]) { int n, c, s; while(SC2(n, k) && n) { int lt = 0; ZERO(in); ZERO(out); for(int i = 1; i <= n; i++) { SC2(c, s); in[c] = i; out[s] = i; lt = max(lt, s+1); } while(!p.empty()) p.pop(); int i; for(i = 1; i < lt; i++) { if(out[i]){ if(p.empty() || p.top() != out[i]) break; else p.pop(); } if(in[i]){ if((int)p.size() < k) p.push(in[i]); else break; } } printf("%s\n", i == lt ? "Sim" : "Nao"); } }