#include #include const int MAXN = 100 * 1000 + 10; using namespace std; bool mark[MAXN]; int color[MAXN]; // رنگ رأس int start[MAXN]; // زمان شروع int finish[MAXN]; // زمان پایان vector adj[MAXN]; // لیست مجاورت int n; // تعداد رأس‌ها int m; // تعداد یال‌ها int now_time; // زمان فعلی void dfs(int v) { mark[v] = 1; color[v] = 1; // این رأس را خاکستری کن start[v] = now_time++; // کارهای پیش‌ترتیب را انجام بده for(int i = 0; i < adj[v].size(); i++) { int u = adj[v][i]; if(mark[u] != 1) dfs(u); // کار‌های پس‌ترتیب این یال را انجام بده } color[v] = 2; // این رأس را سیاه کن finish[v] = now_time; // می‌توانید هنگام خروج هم زمان را اضافه کنید. // کار‌های پس‌ترتیب این رأس را انجام بده } void input() { cin >> n >> m; for (int i = 0; i < m; i++) { int v, u; cin >> v >> u; adj[--v].push_back(--u); adj[u].push_back(v); } } int main() { input(); for (int i = 0; i < n; i++) if(mark[i] == 0) dfs(i); }