关注
 import java.io.*;
import java.util.*;
class Edge{
    int o, t, a, b;
    public Edge(int o, int t, int a, int b){
        this.o = o;
        this.t = t;
        this.a = a;
        this.b = b;
    }
}
public class Main{
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    static final int N = 1010, mod = (int) 1e9 + 7;
    static int[] p = new int[N];
    static int n, m;
    static int[][] c =  new int[N][N];
    static Edge[] edges;
    public static void initC(){
        for (int i = 0; i < N; i ++ )
            for (int j = 0; j <= i; j ++ ){
                if (j == 0) c[i][j] = 1;
                else c[i][j] = (c[i - 1][j] + c[i - 1][j - 1]) % mod;
            }
    }
    public static int find(int u){
        if (p[u] != u){
            p[u] = find(p[u]);
        }
        return p[u];
    }
    public static void union(int i, int j){
        p[find(i)] = find(j);
    }
    public static void main(String[] args) throws IOException{
        String[] ss = br.readLine().split(" ");
        n = Integer.parseInt(ss[0]);
        m = Integer.parseInt(ss[1]);
        edges = new Edge[m];
        initC();
        for (int i = 0; i <= n; i ++ ) p[i] = i;
        for (int i = 0 ; i < m; i ++ ){
            String[] strs = br.readLine().split(" ");
            int o = Integer.parseInt(strs[0]), t = Integer.parseInt(strs[1]), 
            a = Integer.parseInt(strs[2]), b = Integer.parseInt(strs[3]);
            edges[i] = new Edge(o, t, a, b);
        }
        Arrays.sort(edges, (x, y) -> {
            return c[y.a][y.b] - c[x.a][x.b]; 
        });
        int cnt = 0, ans = 0;
        for (int i = 0; i < m; i ++ ){
            Edge e = edges[i];
            if (find(e.o) == find(e.t)) continue;
            union(e.o, e.t);
            ans = (ans + c[e.a][e.b]) % mod;
            cnt ++ ;
        }
        if (cnt != (n - 1)) bw.write(-1 + "");
        else bw.write(ans + "");
        bw.flush();
    }
}
  查看原帖
  点赞  评论
相关推荐
10-31 14:05
  武汉大学 Java  昨天给我发offer了,这个公司好像是做自动驾驶方向的,base苏州,我面的java后端,方向是自动驾驶数据平台和标注平台,说300r/天,还有20餐补,有了解这个公司的友友吗,工作强度如何,推荐去吗
 点赞 评论 收藏   
分享
  点赞 评论 收藏   
分享
 牛客热帖
更多 
 正在热议
 更多 
 # 你实习是赚钱了还是亏钱了? #
 4586次浏览 45人参与
# 找工作八股要背到什么程度? #
 3383次浏览 65人参与
# 京东开奖 #
 427148次浏览 2435人参与
# 秋招开始捡漏了吗 #
 29209次浏览 200人参与
# 我在牛爱网找对象 #
 202532次浏览 1412人参与
# 用一句话形容你的团队氛围 #
 2823次浏览 44人参与
# 你找工作是从容有余 or 匆忙滚爬? #
 2650次浏览 41人参与
# 入职以后才知道的校招谎言 #
 101439次浏览 646人参与
# 上班后,才发现大学__白学了 #
 5111次浏览 32人参与
# 今年秋招还有金九银十吗 #
 23552次浏览 216人参与
# 同bg的你秋招战况如何? #
 160743次浏览 934人参与
# 今年秋招是回暖还是遇冷 #
 2542次浏览 26人参与
# 五一之后,实习真的很难找吗? #
 89996次浏览 561人参与
# 学历对求职的影响 #
 551971次浏览 3921人参与
# 规定下班时间vs实际下班时间 #
 56719次浏览 332人参与
# 辞职后的日常 #
 16438次浏览 84人参与
# 打工人的精神状态 #
 103070次浏览 1318人参与
# 你喜欢工作还是上学 #
 79091次浏览 865人参与
# Offer比较,求稳定还是求发展 #
 65077次浏览 272人参与
# 分享一个让你热爱工作的瞬间 #
 44193次浏览 395人参与
# 一人一个landing小技巧 #
 128538次浏览 1467人参与
查看9道真题和解析