Submission

Status:

(PPPPPPPPPP)(PPPPPPPPPPPP)(PPPPPPP)(PPPP)(PPPPPPP)(PPPPPPP)

Subtask/Task Score:

{4/4}{14/14}{12/12}{7/7}{20/20}{43/43}

Score: 100

User: meme_boi2

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

Language: cpp

Time: 0.088 second

Submitted On: 2025-12-30 19:04:53

#include <bits/stdc++.h>
using namespace std;
#define int long long
vector<vector<int>> path(2e5+1);
int n , m,mod = 1e9+7, ans = 0;
int dfs(int u,int par){
    if(u <= n) return 1;
    int sz = 0;
    vector<int> mat;
    for(auto v: path[u]){
        if(v == par) continue;
        int tmp = dfs(v,u);
        sz += tmp;
        mat.push_back(tmp);
    }
    mat.push_back(n-sz);
    int dp[5][mat.size()];
    memset(dp,0,sizeof(dp));
    dp[1][0] = mat[0];
    for(int i = 0; i < mat.size(); i++){
        dp[1][i] = (dp[1][i-1] + mat[i])%mod;
        for(int j = 2; j <= 4; j++){
            dp[j][i] = (dp[j][i-1] + (dp[j-1][i-1]*mat[i])%mod)%mod;
        }
        
    }
    ans += dp[4][mat.size()-1];
    ans %= mod;
    return sz;
}
int32_t main(){
    cin.tie(nullptr)->sync_with_stdio(0);
    cin >> n >> m;
    int q = n + m-1;
    while(q--){
        int u, v;
        cin >> u >> v;
        path[u].push_back(v);
        path[v].push_back(u);
        
    }
    dfs(n+1,-1);
    cout << ans;
}