Submission
Status:
(PPPPPPPPPP)(PPPPPPPPPPPP)(PPPP-SS)(-SSS)(-SSSSSS)(-SSSSSS)
Subtask/Task Score:
{4/4}{14/14}{0/12}{0/7}{0/20}{0/43}
Score: 18
User: kungarooo
Problemset: อพยพปลอดภัย (Quartet)
Language: cpp
Time: 0.028 second
Submitted On: 2025-11-01 15:44:54
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const long long N=1e9+7,U=200001;
int n,m;
vector<vector<int>> adj(U);
ll dp=0,total_child[U]={};
ll dfs2(int node,int par){
if(node<=n)return 1;
int sz=0;
for(auto i:adj[node]){
if(i==par)continue;
sz+=dfs2(i,node);
}
total_child[node]=sz;
return 0;
}
ll dfs(int node,int par,ll tot){
if(node<=n)return 1;
vector<ll> arr;
if(tot!=0)arr.push_back(tot);
ll sz=0;
tot+=total_child[node];
for(auto i:adj[node]){
if(i==par){
continue;
}
ll tmpsz=dfs(i,node,tot);
sz+=tmpsz;
arr.push_back(tmpsz);
}
ll dd[5][arr.size()]={};
dd[1][0]=arr[0];
for(int i=1;i<arr.size();i++){
dd[1][i]=dd[1][i-1]+arr[i];
dd[1][i]%=N;
for(int j=2;j<=4;j++){
dd[j][i]=dd[j-1][i-1]*arr[i]+dd[j][i-1];
dd[j][i]%=N;
}
}
dp+=dd[4][arr.size()-1];
dp%=N;
//cout<<node<<" "<<dd[4][arr.size()-1]<<" "<<sz<<"::\n";
return sz;
}
int main(){
ios_base::sync_with_stdio(0),cin.tie(NULL);
cin>>n>>m;
for(int i=0;i<n+m-1;i++){
int u,v;
cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs2(n+1,-1);
dfs(n+1,-1,0);
cout<<dp;
return 0;
}