public BipartiteMatrix(TC tc) {
        this.tc = tc;
        this.L_DegreeIndicators = new DegreeIndicator[tc.getV()];
        this.R_DegreeIndicators = new DegreeIndicator[tc.getV()];
        this.degreeIndicatorsPQ = new PriorityQueue<DegreeIndicator>();

        // init the degree indicator array
        for (int i = 0; i < this.tc.getV(); i++) {
            this.L_DegreeIndicators[i] = new DegreeIndicator(Partite.L, i, 0);
            this.R_DegreeIndicators[i] = new DegreeIndicator(Partite.R, i, 0);
        }

        // scan tc, and calculate the right degree
        for (int i = 0; i < this.tc.getV(); i++) {
            for (int j = 0; j < this.tc.getV(); j++) {
                if (true == this.tc.matrix[i][j]) {
                    this.L_DegreeIndicators[i].inc();
                    this.R_DegreeIndicators[j].inc();
                }
            }
        }
    }