6930.Dynamic Connectivity

Time Limit: 1s Memory Limit: 512MB

Consider an undirected graph that consists of $n$ nodes and $m$ edges. There are two types of events that can happen:

A new edge is created between nodesaandb.An existing edge between nodesaandbis removed.

Your task is to report the number of components after every event.

Input Format(From the terminal/stdin)

The first input line has three integers $n$ , $m$ and $k$ : the number of nodes, edges and events.

After this there are $m$ lines describing the edges. Each line has two integers $a$ and $b$ : there is an edge between nodes $a$ and $b$ . There is at most one edge between any pair of nodes.

Then there are $k$ lines describing the events. Each line has the form " $t$ $a$ $b$ " where $t$ is 1 (create a new edge) or 2 (remove an edge). A new edge is always created between two nodes that do not already have an edge between them, and only existing edges can get removed.

  • $2 \le n \le 10^5$
  • $1 \le m,k \le 10^5$
  • $1 \le a,b \le n$

Output Format(To the terminal/stdout)

Print $k+1$ integers: first the number of components before the first event, and after this the new number of components after each event.

Sample Input

Copy
5 3 3
1 4
2 3
3 5
1 2 5
2 3 5
1 1 2
 · · \n
 · \n
 · \n
 · \n
 · · \n
 · · \n
 · · \n

Sample Output

Copy
2 2 2 1
 · · · \n
Source: CSES, Advanced Techniques, 2133

Submit

请先 登录

© 2025 FAQs