A10541 | Fix a Tree
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
A tree is an undirected connected graph without cycles.
Let's consider a rooted undirected tree with $n$ vertices, numbered $1$ through $n$ . There are many ways to represent such a tree. One way is to create an array with $n$ integers $p_{1},p_{2},...,p_{n}$ , where $p_{i}$ denotes a parent of vertex $i$ (here, for convenience a root is considered its own parent).

For this rooted tree the array $p$ is $[2,3,3,2]$ .Given a sequence $p_{1},p_{2},...,p_{n}$ , one is able to restore a tree:
1. There must be exactly one index $r$ that $p_{r}=r$ . A vertex $r$ is a root of the tree.
2. For all other $n-1$ vertices $i$ , there is an edge between vertex $i$ and vertex $p_{i}$ .
A sequence $p_{1},p_{2},...,p_{n}$ is called valid if the described procedure generates some (any) rooted tree. For example, for $n=3$ sequences (1,2,2), (2,3,1) and (2,1,3) are not valid.
You are given a sequence $a_{1},a_{2},...,a_{n}$ , not necessarily valid. Your task is to change the minimum number of elements, in order to get a valid sequence. Print the minimum number of changes and an example of a valid sequence after that number of changes. If there are many valid sequences achievable in the minimum number of changes, print any of them.
Let's consider a rooted undirected tree with $n$ vertices, numbered $1$ through $n$ . There are many ways to represent such a tree. One way is to create an array with $n$ integers $p_{1},p_{2},...,p_{n}$ , where $p_{i}$ denotes a parent of vertex $i$ (here, for convenience a root is considered its own parent).

For this rooted tree the array $p$ is $[2,3,3,2]$ .Given a sequence $p_{1},p_{2},...,p_{n}$ , one is able to restore a tree:
1. There must be exactly one index $r$ that $p_{r}=r$ . A vertex $r$ is a root of the tree.
2. For all other $n-1$ vertices $i$ , there is an edge between vertex $i$ and vertex $p_{i}$ .
A sequence $p_{1},p_{2},...,p_{n}$ is called valid if the described procedure generates some (any) rooted tree. For example, for $n=3$ sequences (1,2,2), (2,3,1) and (2,1,3) are not valid.
You are given a sequence $a_{1},a_{2},...,a_{n}$ , not necessarily valid. Your task is to change the minimum number of elements, in order to get a valid sequence. Print the minimum number of changes and an example of a valid sequence after that number of changes. If there are many valid sequences achievable in the minimum number of changes, print any of them.
输入格式
The first line of the input contains an integer $n$ ( $2<=n<=200000$ ) — the number of vertices in the tree.
The second line contains $n$ integers $a_{1},a_{2},...,a_{n}$ ( $1<=a_{i}<=n$ ).
The second line contains $n$ integers $a_{1},a_{2},...,a_{n}$ ( $1<=a_{i}<=n$ ).
输出格式
In the first line print the minimum number of elements to change, in order to get a valid sequence.
In the second line, print any valid sequence possible to get from $(a_{1},a_{2},...,a_{n})$ in the minimum number of changes. If there are many such sequences, any of them will be accepted.
In the second line, print any valid sequence possible to get from $(a_{1},a_{2},...,a_{n})$ in the minimum number of changes. If there are many such sequences, any of them will be accepted.
输入输出样例
输入 #1
4 2 3 3 4
输出 #1
1 2 3 4 4
输入 #2
5 3 2 2 5 3
输出 #2
0 3 2 2 5 3
输入 #3
8 2 3 5 4 1 6 6 7
输出 #3
2 2 3 7 8 1 6 6 7
In the first sample, it's enough to change one element. In the provided output, a sequence represents a tree rooted in a vertex $4$ (because $p_{4}=4$ ), which you can see on the left drawing below. One of other correct solutions would be a sequence 2 3 3 2, representing a tree rooted in vertex $3$ (right drawing below). On both drawings, roots are painted red.
In the second sample, the given sequence is already valid.
In the second sample, the given sequence is already valid.
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?
提交通过
评测结果:Accepted