#include #include #include using namespace std; const int MAXV = 2500; class edge { public: int dest; edge *next; edge(int d, edge* n=0) : dest(d), next(n) {} }; struct vertex { edge *list; bool visited; } graph[MAXV], inverseGraph[MAXV]; stack dfsStack; int districtSizes[MAXV]; void dfs(int v) { graph[v].visited = true; for(edge* e = graph[v].list; e != 0; e = e->next) { int w = e->dest; if (!graph[w].visited) dfs(w); } dfsStack.push(v); } int findSize(int v) { inverseGraph[v].visited = true; int size = 1; for(edge* e = inverseGraph[v].list; e != 0; e = e->next) { int w = e->dest; if (!inverseGraph[w].visited) size += findSize(w); } return size; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, nEdges = 0; cin >> n; for(int i=0; i> val; if (val == 1) { graph[i].list = new edge(j, graph[i].list); inverseGraph[j].list = new edge(i, inverseGraph[j].list); nEdges++; } } } for(int i=0; i