usaco Controlling Companies

来源:互联网 发布:网络教育学费一般多少 编辑:程序博客网 时间:2024/06/11 12:03
 
/*ID: daniel.20LANG: JAVATASK: concom */import java.io.*;import java.util.*;public class concom {    static int num;    static int matrix[][];    static int control[][];    public static void initial() throws Exception {        BufferedReader f = new BufferedReader(new FileReader("concom.in"));        num = Integer.parseInt(f.readLine());        matrix = new int[101][101];        control = new int[101][101];        for (int i = 0; i < num; ++i) {            StringTokenizer st = new StringTokenizer(f.readLine());            int x = Integer.parseInt(st.nextToken());            int y = Integer.parseInt(st.nextToken());            int value = Integer.parseInt(st.nextToken());            matrix[x][y] = value;        }    }    public static void update(int i, int j) {        for (int k = 1; k < 101; ++k) {            matrix[i][k] += matrix[j][k];            if (matrix[i][k] > 50 && control[i][k] == 0) {                control[i][k] = 1;                update(i, k);            }        }        for (int k = 1; k < 101; ++k) {            if (control[k][i] == 1) {                matrix[k][j] += matrix[i][j];                if (matrix[k][j] > 50 && control[k][j] == 0) {                    control[k][j] = 1;                    update(k, j);                }            }        }    }    public static void work() {        for (int i = 1; i < 101; ++i) {            for (int j = 1; j < 101; ++j) {                if (matrix[i][j] > 50&&control[i][j]==0) {                    control[i][j] = 1;                    update(i, j);                }            }        }    }    public static void print() throws Exception {        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("concom.out")));        for (int i = 1; i < 101; ++i) {            for (int j = 1; j < 101; ++j) {                if (control[i][j] == 1&&i!=j) {                    out.println(i + " " + j);                }            }        }        out.close();    }    public static void main(String[] args) throws Exception {        initial();        work();        print();        System.exit(0);    }}


一个模拟题,开始想用并查集,现在发现并查集在这里没法用。。。

之后用朴素的数组做,其实这应该算个模拟,必须用到递归,以用递归就意味着必须思维很清晰. 递归是很难debug的

想清楚后还是很快就出来了,忘记了i!=j这个,题目又阴我...