提交时间:2025-05-27 15:20:30

运行 ID: 37893

#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef long long ll; const int maxn=2e5+10,mod=1e9+7; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } inline int add(int a,int b){if((a+=b)>=mod)a-=mod;return a;} inline int qp(int a,int b){ int res=1; while(b){ if(b&1)res=res*1ll*a%mod; a=a*1ll*a%mod;b>>=1; }return res; } int n; vector<int>E[maxn]; int f[105][105]; int s1[maxn],s2[maxn],t[maxn]; void conv(int *a,int *b,int *c){ s1[0]=a[0];up(i,1,n-1)s1[i]=add(s1[i-1],a[i]); s2[0]=b[0];up(i,1,n-1)s2[i]=add(s2[i-1],b[i]); up(i,0,n-1)c[i]=s1[i]*1ll*s2[i]%mod; down(i,n-1,1)c[i]=add(c[i],mod-c[i-1]); } void dfs(int u,int fa){ f[u][0]=1; for(int x:E[u])if(x!=fa){ dfs(x,u); up(i,0,n-1)t[i+1]=f[x][i];t[0]=1; conv(f[u],t,f[u]); } } int ans[maxn]; void dfs2(int u,int fa){ ans[u]=1; for(int x:E[u])if(x!=fa)dfs2(x,u),ans[u]=ans[u]*1ll*(ans[x]+1)%mod; } void slv(){ n=read();up(i,1,n)E[i].clear(); memset(f,0,sizeof(f)); up(i,1,n-1){ int x=read(),y=read(); E[x].p_b(y),E[y].p_b(x); }dfs(1,0); int res=0; for(int x:E[1])up(i,1,n)f[x][i]=add(f[x][i-1],f[x][i]); for(int x:E[1])up(i,0,n){ int prod=f[x][i];if(i)prod=add(prod,mod-f[x][i-1]); for(int y:E[1])if(y!=x)prod=prod*1ll*(i?f[y][i-1]+1:1)%mod; res=add(res,prod); } dfs2(1,0); res=add(ans[1],mod-res); printf("%d\n",res); } int main(){ //freopen("planb.in","r",stdin),freopen("planb.out","w",stdout); int t=read();up(i,1,t){ printf("Case #%d: ",i);slv(); } return 0; }