Bob has a permutation of integers from 1 to n. Denote this permutation as p. The i-th element of p will be denoted as pi. For all pairs of distinct integers i, j between 1 and n, he wrote the number ai, j = min(pi, pj). He writes ai, i = 0 for all integer i from 1 to n.
Bob gave you all the values of ai, j that he wrote down. Your job is to reconstruct any permutation that could have generated these values. The input will be formed so that it is guaranteed that there is at least one solution that is consistent with the information given.
The first line of the input will contain a single integer n (2 ≤ n ≤ 50).
The next n lines will contain the values of ai, j. The j-th number on the i-th line will represent ai, j. The i-th number on the i-th line will be 0. It's guaranteed that ai, j = aj, i and there is at least one solution consistent with the information given.
Print n space separated integers, which represents a permutation that could have generated these values. If there are multiple possible solutions, print any of them.
2 0 1 1 0
2 1
5 0 2 2 1 2 2 0 4 1 3 2 4 0 1 3 1 1 1 0 1 2 3 3 1 0
2 5 4 1 3
In the first case, the answer can be {1, 2} or {2, 1}.
In the second case, another possible answer is {2, 4, 5, 1, 3}.
题意:给你一个对称矩阵,并告诉你矩阵中元素的含义,让你还原一个排列P。
思路1:统计第i行出现次数最多的那个数,就是p[i]的对应值,如果都只出现过一次,则该行的值,要么是最大值,要么是次大值。
思路2:结论:每行中的最大元素就是p[i]的答案(除非maxn=n-1)。
为什么?很简单,我们用反证法,假设该行的存在一个较小值a[i][j']<a[i][j]是该行的答案,且这两个值出现的次数不全为1次,则再设a[i][k]=a[i][j']<a[i][j]
则根据定义a[i][k]=min(p[i],p[k])=a[i][j']=min(p[i],p[j']) 若这两个值得相等,且要满足是一个正常的无重复的排列,显然不可能有a[i][j']=a[i][k]=p[j]=p[k]的情况,那么只有p[i]=a[i][k]=a[i[j']
但又因为a[i][j]=min(p[i],p[j])>a[i][j'] 则说明p[i]>a[i][j'] 与之前的结论不符,故不成立,因此这题可以在每行输入进来后直接求取最大值,存进数组,最后特判一下最大值为N-1的情况,输出即可,更加简洁方便。