#include using namespace std; const int MAXN = 100005; vector adj[MAXN]; // Danh sách kề bool visited[MAXN]; // Đánh dấu trạm đã được thăm int lost_power[MAXN]; // Lưu sự kiện đầu tiên làm trạm mất điện // BFS tìm các trạm có điện từ trạm 1 void bfs(int start, int N) { queue q; fill(visited, visited + N + 1, false); visited[start] = true; q.push(start); while (!q.empty()) { int node = q.front(); q.pop(); for (int neighbor : adj[node]) { if (!visited[neighbor]) { visited[neighbor] = true; q.push(neighbor); } } } } int main() { ios::sync_with_stdio(false); cin.tie(0); ifstream fin("ELECTRIC.INP"); ofstream fout("ELECTRIC.OUT"); int N, M, Q; fin >> N >> M >> Q; vector> edges; // Lưu các cạnh để dễ xoá for (int i = 0; i < M; i++) { int A, B; fin >> A >> B; adj[A].push_back(B); adj[B].push_back(A); edges.push_back({A, B}); } vector> events; for (int i = 0; i < Q; i++) { int C, D; fin >> C >> D; events.push_back({C, D}); } fill(lost_power, lost_power + N + 1, -1); // Khởi tạo tất cả trạm chưa bị mất điện // Xử lý từng sự kiện for (int event_id = 1; event_id <= Q; event_id++) { int C = events[event_id - 1].first; int D = events[event_id - 1].second; // Xóa cạnh C-D khỏi đồ thị adj[C].erase(remove(adj[C].begin(), adj[C].end(), D), adj[C].end()); adj[D].erase(remove(adj[D].begin(), adj[D].end(), C), adj[D].end()); // Chạy BFS để kiểm tra kết nối từ trạm 1 bfs(1, N); // Ghi nhận trạm bị mất điện sau sự kiện này for (int i = 2; i <= N; i++) { if (!visited[i] && lost_power[i] == -1) { lost_power[i] = event_id; } } } // Xuất kết quả ra file for (int i = 2; i <= N; i++) { fout << lost_power[i] << "\n"; } return 0; }