#line 1 "a.cpp" #include #include #include using namespace std; #line 1 "/home/kotatsugame/library/graph/SCC.cpp" //Strongly Connected Components #line 3 "/home/kotatsugame/library/graph/SCC.cpp" struct SCC{ int n; vectorcomp,order; vectorused; vector >G,RG; SCC(int _n=0):n(_n),comp(_n,-1),used(_n,false),G(_n),RG(_n){} void add_edge(int from,int to) { G[from].push_back(to); RG[to].push_back(from); } void copy(const vector >&H) { for(int i=0;i=0;i--)if(comp[order[i]]==-1)rdfs(order[i],cnt++); return cnt; } int build(vector >&H) { int ret=build(); H.assign(ret,vector()); for(int i=0;i>N>>M; vectorv(2*M); for(int i=0;i>B[i]>>C[i]; v[i*2]=B[i]; v[i*2+1]=C[i]; } sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end()); SCC P(v.size()); for(int i=0;i >H; int K=P.build(H); vectormx(K); for(int i=0;i