pdpd123

Problem 14

Feb 17th, 2020
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.96 KB | None | 0 0
  1. #include <vector>
  2. #include <iostream>
  3. #define int long long
  4. #define mod 1000000007
  5. using namespace std;
  6. int p[100010],size[100010];
  7. vector<int> v;
  8. int find(int x){
  9.     return (p[x]==x)?x:p[x]=find(p[x]);
  10. }
  11. inline void join(int x,int y){
  12.     x=find(x);
  13.     y=find(y);
  14.     if(x==y)
  15.         return;
  16.     if(size[x]>size[y])
  17.         swap(x,y);
  18.     p[x]=y;
  19.     size[y]+=size[x];
  20. }
  21. signed main() {
  22.     int n,k,a,b,c,ans=0,abc[110]={1};
  23.     cin>>n>>k;
  24.     for(int i=1;i<=n;i++){
  25.         p[i]=i;
  26.         size[i]=1;
  27.     }
  28.     for(int i=1;i<n;i++){
  29.         cin>>a>>b>>c;
  30.         if(!c){
  31.             join(a,b);
  32.         }
  33.     }
  34.     for(int i=1;i<=n;i++){
  35.         if(p[i]==i){
  36.             v.push_back(size[i]);
  37.         }
  38.     }
  39.     for(int i=1;i<=k;i++)
  40.         abc[i]=abc[i-1]*n%mod;
  41.     for(auto &i:v){
  42.         b=1;
  43.         for(int j=1;j<k;j++){
  44.             b=b*i%mod;
  45.             ans=(ans+b*(n-i)%mod*abc[k-j-1])%mod;
  46.         }
  47.     }
  48.     cout<<ans;
  49. }
Add Comment
Please, Sign In to add comment