#P16449. PM10384王国地图

PM10384王国地图

题目背景

字节王国准备举办一年一度的城镇交流节。地图绘制师林墨和助手安澜受命重新制作一张道路示意图,方便来访者查看各城镇之间的交通关系。

旧地图把所有城镇随意画在纸上,许多道路在图中交叉,参观者经常把交叉点误认为新的路口。为了让地图一目了然,林墨决定把所有城镇分列在两条竖直线上,每条道路都画成连接左右两列城镇的直线段,并且任何两条没有公共端点的道路都不能相交。

王国现有的道路没有形成环,但并不一定能全部画进这种新地图。若无法保留所有道路,安澜只能从地图中删去一部分道路。为了尽量完整地呈现交通网络,他们希望删去的道路数量最少;若有多种最优方案,则采用道路编号序列字典序最小的一种。

题目描述

王国中共有 nn 个城镇,编号为 0,1,,n10,1,\ldots,n-1,并有 mm 条双向道路。道路按照输入顺序编号为 0,1,,m10,1,\ldots,m-1

原道路图保证是一片森林,即不存在环。

你需要删去若干条道路,使剩余道路能够按照下列方式绘制:

  1. 画出两条互相平行的竖直线;
  2. 每个城镇必须恰好放在其中一条竖直线上;
  3. 每条剩余道路必须画成连接左右两列城镇的直线段;
  4. 任意两条道路除了可能共享端点外,不得相交。

请在删去道路数量最少的前提下,输出字典序最小的被删道路编号序列。

由于道路编号互不相同,输出序列应按从小到大的顺序排列。

输入格式

第一行包含两个整数 n,mn,m,分别表示城镇数量和道路数量。

接下来 mm 行,第 ii 行包含两个整数 ui,viu_i,v_i,表示编号为 i1i-1 的道路连接城镇 uiu_iviv_i

输出格式

第一行输出一个整数 kk,表示需要删去的道路数量。

k>0k>0,第二行输出 kk 个严格递增的整数,表示被删道路的编号。

k=0k=0,无需输出第二行。

数据范围

  • 1n3001\le n\le 300
  • 0mn10\le m\le n-1
  • 0ui<vi<n0\le u_i<v_i<n
  • 所有道路互不相同;
  • 输入图中不存在环。

字典序说明

对于两个长度相同的整数序列 AABB,若在第一个不同的位置上 AA 的元素更小,则称 AA 的字典序更小。

本题首先要求删去的道路数量最少,因此参与字典序比较的候选序列长度一定相同。

样例 1

输入

5 3
0 1
1 2
2 3

输出

0

说明

这三条道路本身就可以无交叉地画在两列城镇之间,因此不需要删去任何道路。

样例 2

输入

7 6
0 1
1 2
2 3
3 4
5 6
2 5

输出

1
0

说明

删去任意一条道路后都可以完成合法绘制。为了使答案字典序最小,应删去编号为 00 的道路。

样例 3

输入

20 19
8 17
9 12
4 7
2 7
2 19
3 12
6 12
1 9
5 18
0 12
6 16
0 11
3 14
10 15
12 13
13 18
13 19
15 17
15 19

输出

4
1 3 5 14

样例 4

输入

1 0

输出

0