跳转至

自动接线器

  • 参考时间限制:0.5 秒(评测环境与性能)。
  • 实际时限:在目标环境实测标准程序最慢测试文件的中位时间,乘以 2,再按 0.5 秒向上取整。
  • 内存限制:128 MB。

背景故事

装机工坊准备给电脑和工作台之间的线路安装自动接线器。只要一条线路的任意一端装有接线器,就能自动接通;同一端口上的接线器可以照顾与它相连的全部线路。

接线器既可以装在电脑端,也可以装在工作台端。请用尽量少的接线器完成全部连接。

形式化问题描述

共有 \(n\) 个端口,编号为 \(1,\ldots,n\) . 端口 \(i\) 的类型为 \(a_i\) :\(0\) 表示工作台端口,\(1\) 表示电脑端口。

有 \(m\) 条线路,每条线路连接一个工作台端口和一个电脑端口。选择一个端口集合 \(S\) ,使每条线路至少有一个端点属于 \(S\) ,并使 \(\lvert S\rvert\) 最小。输出任意一个最优集合即可。

输入格式

第一行两个整数 \(n,m\) .

第二行 \(n\) 个整数 \(a_1,\ldots,a_n\) .

接下来 \(m\) 行,每行两个整数 \(u,v\) ,表示连接端口 \(u\) 和 \(v\) 的一条线路。

输出格式

第一行输出最少接线器数量 \(c\) .

第二行输出 \(c\) 个互不相同的端口编号,顺序任意。评测器检查数量最优且全部线路被覆盖,不要求与样例选择相同。

样例 1

输入

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

输出

3
1 3 6

样例 2

输入

4 3
0 1 1 1
1 2
1 3
1 4

输出

1
1

样例 3

输入

4 2
0 0 1 1
1 3
2 3

输出

1
3

样例解释

样例 1 选择端口 \(1,3,6\) 可以覆盖所有线路。线路 \((1,2)\) 、\((3,4)\) 、\((5,6)\) 两两没有公共端点,因此至少需要三个接线器。

样例二分图,工作台端口 1、3、6 安装接线器后覆盖全部线路

双圆圈表示已安装接线器的端口,左侧为工作台,右侧为电脑。

样例 2 只需选择星形中心端口 \(1\) . 样例 3 只需选择电脑端口 \(3\) ;孤立端口 \(4\) 不需要安装接线器。

数据范围与保证

对 100% 的数据:\(1\le n\le100000\) ,\(1\le m\le200000\) ,\(a_i\in\{0,1\}\) ,\(1\le u,v\le n\) ,且每条线路满足 \(a_u\ne a_v\) . 允许孤立端口,也允许同一对端口间存在多条线路。

分值比例 额外条件
100% 无额外条件