http://codeforces.com/contest/500/problem/B
并查集
1 import java.util.Scanner; 2 3 public class Main { 4 static final int MAX = Integer.MAX_VALUE; 5 static int[] f = new int[1000]; 6 7 public static void main(String[] args) { 8 Scanner io = new Scanner(System.in); 9 int n = io.nextInt(); 10 11 int[] a = new int[n]; 12 for (int i = 0; i < n; i++, f[i] = i) a[i] = io.nextInt(); 13 14 for (int i = 0, fx, fy; i < n; i++) { 15 String s = io.nextLine(); 16 while (s.length() == 0) s = io.nextLine(); 17 for (int j = 0; j < s.length(); j++) 18 if (s.charAt(j) == '1') { 19 fx = find(i); 20 fy = find(j); 21 f[fx] = fy; 22 } 23 } 24 25 for (int i = 0; i < n; i++) { 26 for (int j = i + 1; j < n; j++) { 27 if (a[i] > a[j] && find(i) == find(j)) { 28 int t = a[i]; 29 a[i] = a[j]; 30 a[j] = t; 31 } 32 } 33 } 34 35 for (int i = 0; i < n; i++) System.out.print(a[i] + " "); 36 } 37 38 static int find(int x) { 39 return f[x] == x ? x : (f[x] = find(f[x])); 40 } 41 42 }