Submission

Status:

Compilation Error

Subtask/Task Score:

Score: 0

User: konthaina_TH

Problemset: อพยพปลอดภัย (Quartet)

Language: cpp

Time: 0.000 second

Submitted On: 2026-09-23 23:37:32

#include <bits/stdc++.h>
using namespace std;
#define int long long 
int mod = 1e9+7;
vector<int> graph[100005];
vector<int> edge[100005];
int val[100005];
int n,m;

void dfs(int u,int p) {
    if (u <= n) {
        val[u] = 1;
    }
    for (int v : graph[u]) {
        if (v == p) continue;
        dfs(v,u);
        val[u] += val[v];
        edge[u].push_back(val[v]);
    }
}

void set_val(int u,int p) {
    if (u <= n) {
        return;
    }
    for (int v : graph[u]) {
        if (v == p or v <= n) continue;
        edge[v].push_back(n - val[v]);
        set_val(v,u);
    }
}
int main() {
    cin >> n >> m;
    for (int i=0;i<n+m-1;i++) {
        int u,v;
        cin >> u >> v;
        graph[u].push_back(v);
        graph[v].push_back(u);
    }
    dfs(n+1,n+1);
    set_val(n+1,n+1);

    int ans = 0;
    for (int i = n+1;i<=n+m;i++) {
        if (edge[i].size() < 4) continue;
        int dp[5] = {0};
        for (int val : edge[i]) {
            dp[4] += dp[3] * val;
            dp[3] += dp[2] * val;
            dp[2] += dp[1] * val;
            dp[1] += val;
        }
        ans += dp[4] % mod;
    }
    cout << ans % mod << "\n";
    return 0;
}