CF1283C Friends and Gifts

题目描述

有 $n$ 个朋友想在新年互相赠送礼物。每个朋友都要送出且只送出一份礼物,并且收到且只收到一份礼物。朋友不能把礼物送给自己。 对于每个朋友,已知一个值 $f_i$:如果第 $i$ 个朋友还不知道要送给谁,则 $f_i = 0$;如果 $1 \le f_i \le n$,则表示第 $i$ 个朋友想把礼物送给第 $f_i$ 个朋友。 你需要将所有未知的值(即 $f_i = 0$)补全,使得每个朋友都恰好送出一份礼物且收到一份礼物,并且没有人把礼物送给自己。保证初始信息没有矛盾。 如果有多种方案,可以输出任意一种。

输入格式

输入的第一行包含一个整数 $n$($2 \le n \le 2 \times 10^5$),表示朋友的数量。 第二行包含 $n$ 个整数 $f_1, f_2, \dots, f_n$($0 \le f_i \le n$,$f_i \ne i$,所有 $f_i \ne 0$ 的值互不相同),其中 $f_i$ 为 $0$ 表示第 $i$ 个朋友还不知道要送给谁,$1 \le f_i \le n$ 表示第 $i$ 个朋友想把礼物送给第 $f_i$ 个朋友。保证至少有两个 $f_i = 0$。

输出格式

输出 $n$ 个整数 $nf_1, nf_2, \dots, nf_n$,其中 $nf_i$ 等于 $f_i$(如果 $f_i \ne 0$),否则为你补全的第 $i$ 个朋友要送礼物的对象编号。所有 $nf_i$ 必须互不相同,且 $nf_i \ne i$。每个朋友都恰好送出一份礼物且收到一份礼物,没有人把礼物送给自己。 如果有多种方案,可以输出任意一种。

说明/提示

由 ChatGPT 4.1 翻译