Submission #1300928

#TimeUsernameProblemLanguageResultExecution timeMemory
1300928Faisal_SaqibŠarenlist (COCI22_sarenlist)C++20
0 / 110
1095 ms572 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=70,mod=1e9+7;
int d[N][N];
int f(int x)
{
  return ((x*(x-1))/2)%mod;
}
int powmod(int x,int y)
{
  int ans=1;
  while(y)
  {
    if(y&1)ans=(ans*x)%mod;
    // cout<<x<<' '<<y<<' '<<ans<<endl;
    y>>=1;
    x*=x;
    x%=mod;
  }
  return ans;
}
int32_t main()
{
  ios::sync_with_stdio(0);
  cout.tie(0);
  cin.tie(0);
  int n,m,k;
  cin>>n>>m>>k;
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=n;j++)
    {
      d[i][j]=1e9*(i!=j);
    }
  }
  for(int i=1;i<n;i++)
  {
    int x,y;
    cin>>x>>y;
    d[x][y]=1;
    d[y][x]=1;
  }
  for(int m=1;m<=n;m++)
  {
    for(int s=1;s<=n;s++)
    {
      for(int e=1;e<=n;e++)
      {
        d[s][e]=min(d[s][e],d[s][m]+d[m][e]);
      }
    }
  }
  int ways=1;
  int rem=n-1;
  while(m--)
  {
    int x,y;
    cin>>x>>y;
    int t=d[x][y];
    // cout<<t<<' '<<f(t)<<' '<<k<<' '<<f(k)<<endl;
    rem-=2;
    ways*=f(t);
    ways%=mod;
    ways*=f(k);
    ways%=mod;
    ways*=2;
    ways%=mod;
  }
  cout<<(ways*powmod(k,rem))%mod<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...