Pages

Saturday 1 December 2012

UVA - 11060 - Beverages

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuffer sb = new StringBuffer("");
        String m = "";
        int index = 1;
        while ((m = br.readLine()) != null) {
            int n = Integer.parseInt(m);
            boolean[][] relation = new boolean[n][n];
            boolean[] used = new boolean[n];
            int[] indexOF = new int[n];
            HashMap<String, Integer> hm = new HashMap<String, Integer>();
            String[] arr = new String[n];
            for (int i = 0; i < n; i++) {
                String s = br.readLine();
                arr[i] = s;
                hm.put(s, i);
                indexOF[i] = 0;
                used[i] = false;
                for (int j = 0; j < n; j++) {
                    relation[i][j] = false;
                }
            }
            int z = Integer.parseInt(br.readLine());
            for (int i = 0; i < z; i++) {
                String[] str = br.readLine().split(" ");
                int ind1 = hm.get(str[0]);
                int ind2 = hm.get(str[1]);
                if (!relation[ind1][ind2]) {
                    relation[ind1][ind2] = true;
                    indexOF[ind2]++;
                }
            }
            boolean finished = false;
            int begin=-1;
            sb.append("Case #").append(index).append(": Dilbert should drink beverages in this order:");
            while (!finished) {
                finished = true;
                for (int i = 0; i < n; i++) {
                    if (!used[i] && indexOF[i] == 0) {
                        used[i] = true;
                        sb.append(" ").append(arr[i]);
                        for (int j = 0; j < n; j++) {
                            if (relation[i][j]) {
                                indexOF[j]--;
                            }
                        }
                        i = begin;
                        finished = false;
                    }
                }
            }
            sb.append(".\n\n");
            index++;
            br.readLine();
        }
        System.out.print(sb);
    }
}

No comments:

Post a Comment