#include #include using namespace std; const int MAXN = 100 * 1000 + 10; bool mark[MAXN]; vector adj[MAXN]; // لیست مجاورت رأس‌ها int n; // تعداد رأس‌ها int bfs(int v) { int far = 0; queue q; // صفی که رأس‌ها در آن قرار می‌گیریند queue depth; // صفی که ارتفاع رأس‌های متناظر در صف بالا قرار دارند mark[v] = 1; q.push(v); depth.push(0); // ارتفاع ریشه از خودش صفر است while(q.size()) { v = q.front(); far = depth.front(); q.pop(); depth.pop(); for(unsigned int i = 0; i < adj[v].size(); i++) { int u = adj[v][i]; if (mark[u] == 1) continue; mark[u] = 1; q.push(u); depth.push(far + 1); // ارتفاع همسایه یک واحد بیشتر از ارتفاع این رأس است } } return far; } int find_center() { int dist = 1<<30; // تقریبا بینهایت برای اینکه در کمینه تاثیری نگذارد و شعاع را نگه می‌دارد int v = 0; // مرکز گراف را در این متغیر نگه می‌داریم for (int i = 0; i < n; i++) { int tmp = bfs(i); if(tmp < dist) { dist = tmp; v = i; } } return v; }