5050.cats 的最小生成树

时间限制:3s 内存限制:512MB

cats 有一个有 $n$ 个点,$m$ 个边的可能有重边的无向图。边有边权,其中第 $i$ 条边的边权为 $i$。

在一次操作中,cats 会找出这个图的最小生成树,然后将图中所有属于最小生成树的边移除。cats 会不断重复以上操作直到图不连通为止。

现在,你需要告诉 cats 图中的每一条边是在第几次操作中被移除的。若一条边在操作结束时未被移除,你需要输出 $−1$。

可以证明在以上条件下,cats 每次选择的最小生成树一定是唯一的。

注:一个有 $n$ 个点的图的最小生成树即为这个图的所有的包含全部 $n$ 个点和刚好 $n−1$ 条边的连通子图中使子图所有边的边权总和最小的子图。

输入格式(从终端/标准输入读取)

第一行一个整数 $T (1≤T≤1000)$,表示测试数据的组数。

每组测试数据的第一行包含两个整数 $n,m (2≤n≤10^5 ,1≤m≤3⋅10^5 )$,表示图中点和边的个数。

接下来 $m$ 行,每行两个整数 $u_i,v_i(1≤u_i ,v_i ≤n,u_i\neq v_i)$,表示第 $i$ 条边连接的两个点。第 $i$ 条边的边权为 $i$。

保证所有测试数据的 $n$ 之和不超过 $5⋅10^5$ ,保证所有测试数据的 $m$ 之和不超过 $1.5⋅10^6$ 。

输出格式(输出至终端/标准输出)

对于每组测试数据,输出一行 $m$ 个整数。对于第 $i$ 个数,若第 $i$ 个边在第 $x$ 次操作中被移除,你需要输出 $x$。若第 $i 个边在操作结束时未被移除,你需要输出 $−1$。

输入样例

复制
3
3 3
1 2
2 3
3 1
3 3
1 2
2 1
2 1
4 6
1 2
1 2
1 3
2 3
1 4
3 4
 \n
 · \n
 · \n
 · \n
 · \n
 · \n
 · \n
 · \n
 · \n
 · \n
 · \n
 · \n
 · \n
 · \n
 · \n
 · \n

输出样例

复制
1 1 -1
-1 -1 -1
1 2 1 2 1 2
 · ·  \n
  ·  ·  \n
 · · · · · \n
来源: 2024“钉耙编程”中国大学生算法设计超级联赛(8)

提交题解

Please login first.

© 2025 FAQs