CF500B.New Year Permutation

普及/提高-

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

User ainta has a permutation _p_1, _p_2, ..., p__n. As the New Year is coming, he wants to make his permutation as pretty as possible.

Permutation _a_1, _a_2, ..., a__n is prettier than permutation _b_1, _b_2, ..., b__n, if and only if there exists an integer k (1 ≤ k ≤ n) where _a_1 = _b_1, _a_2 = _b_2, ..., a__k - 1 = b__k - 1 and a__k < b__k all holds.

As known, permutation p is so sensitive that it could be only modified by swapping two distinct elements. But swapping two elements is harder than you think. Given an n × n binary matrix A, user ainta can swap the values of p__i and p__j (1 ≤ i, j ≤ n, i ≠ j) if and only if A__i, j = 1.

Given the permutation p and the matrix A, user ainta wants to know the prettiest permutation that he can obtain.

用户 ainta 有一个排列 p1, p2, ..., pnp_1, p_2, ..., p_n。随着新年临近,他希望将该排列变得尽可能“漂亮”。

排列 a1, a2, ..., ana_1, a_2, ..., a_n 比排列 b1, b2, ..., bnb_1, b_2, ..., b_n 更漂亮,当且仅当存在一个整数 kk(1 ≤ k ≤ n1 ≤ k ≤ n),使得 a1 = b1, a2 = b2, ..., ak−1 = bk−1a_1 = b_1,\, a_2 = b_2,\, ..., \, a_{k-1} = b_{k-1},且 ak < bka_k < b_k 同时成立。

众所周知,排列 pp 非常敏感,只能通过交换其中两个不同元素来修改。但交换操作比你想象的更困难。给定一个 n × nn × n 的 0-1 矩阵 AA,用户 ainta 当且仅当 Ai,j = 1A_{i,j} = 1 时,才允许交换 pip_i 和 pjp_j(其中 1 ≤ i, j ≤ n1 ≤ i,\,j ≤ n,且 i ≠ ji ≠ j)。

给定排列 pp 和矩阵 AA,用户 ainta 想知道他所能得到的最漂亮的排列。

输入格式

The first line contains an integer n (1 ≤ n ≤ 300) — the size of the permutation p.

The second line contains n space-separated integers _p_1, _p_2, ..., p__n — the permutation p that user ainta has. Each integer between 1 and n occurs exactly once in the given permutation.

Next n lines describe the matrix A. The i-th line contains n characters '0' or '1' and describes the i-th row of A. The j-th character of the i-th line A__i, j is the element on the intersection of the i-th row and the j-th column of A. It is guaranteed that, for all integers i, j where 1 ≤ i < j ≤ n, A__i, j = A__j, i holds. Also, for all integers i where 1 ≤ i ≤ n, A__i, i = 0 holds.

第一行包含一个整数 nn(1≤n≤3001 \leq n \leq 300)——表示排列 pp 的大小。

第二行包含 nn 个以空格分隔的整数 p1, p2, …, pnp_1,\ p_2,\ \dots,\ p_n——即用户 ainta 所拥有的排列 pp。给定排列中,11 到 nn 之间的每个整数恰好出现一次。

接下来的 nn 行描述矩阵 AA。第 ii 行包含 nn 个字符,每个字符为 '0' 或 '1',表示矩阵 AA 的第 ii 行。第 ii 行的第 jj 个字符 Ai,jA_{i,j} 表示矩阵 AA 中第 ii 行与第 jj 列交点处的元素。保证对所有满足 1≤i<j≤n1 \leq i < j \leq n 的整数 i,ji,j,均有 Ai,j=Aj,iA_{i,j} = A_{j,i} 成立;且对所有满足 1≤i≤n1 \leq i \leq n 的整数 ii,均有 Ai,i=0A_{i,i} = 0 成立。

输出格式

In the first and only line, print n space-separated integers, describing the prettiest permutation that can be obtained.

在第一行且唯一的一行中,输出 n 个用空格分隔的整数,描述所能得到的最漂亮的排列。

输入输出样例

  • 输入#1

    7
    5 2 4 3 6 7 1
    0001001
    0000000
    0000010
    1000001
    0000000
    0010000
    1001000

    输出#1

    1 2 4 3 6 7 5
  • 输入#2

    5
    4 2 1 5 3
    00100
    00011
    10010
    01101
    01010

    输出#2

    1 2 3 4 5

说明/提示

In the first sample, the swap needed to obtain the prettiest permutation is: (_p_1, _p_7).

In the second sample, the swaps needed to obtain the prettiest permutation is (_p_1, _p_3), (_p_4, _p_5), (_p_3, _p_4).

A permutation p is a sequence of integers _p_1, _p_2, ..., p__n, consisting of n distinct positive integers, each of them doesn't exceed n. The i-th element of the permutation p is denoted as p__i. The size of the permutation p is denoted as n.

在第一个样例中,为得到最漂亮的排列所需执行的交换操作是:(p1, p7)(p_1,\,p_7)。

在第二个样例中,为得到最漂亮的排列所需执行的交换操作是:(p1, p3), (p4, p5), (p3, p4)(p_1,\,p_3),\,(p_4,\,p_5),\,(p_3,\,p_4)。

一个排列 pp 是由 nn 个互不相同的正整数组成的序列 p1, p2, …, pnp_1,\,p_2,\,\dots,\,p_n,且每个数均不超过 nn。排列 pp 的第 ii 个元素记作 pip_i。排列 pp 的大小记作 nn。

输入解题思路,AI测评打分。不知道怎么写?

首页