疑点先写上以后再看
#include <bits/stdc++.h>
using namespace std;
long long sum = 0;
long long sum2 = 0;
int n, u, v, k, xi;
long long pow(int a, int b){
long long sum3 = a;
for(int i = 0; i < b-1; i++){
sum3 *= a;
}
return sum3;
}
struct maze{
bool color;
int f;
};
vector<maze> vec[200005];
void dfs(int x, int temp, bool flag){
if(temp == k && !flag){
sum2++;
sum2 %= 1000000007;
return;
}else if(temp == k || flag){
sum2 %= 1000000007;
return;
}
if(flag){
return;
}
dfs(x, temp + 1, flag);
for(int i = 0; i < vec[x].size(); i++){
dfs(vec[x][i].f, temp + 1, vec[x][i].color ? 1 : 0);
}
}
int main(){
cin >> n >> k;
sum = pow(n%1000000007, k%1000000007) % 1000000007;
for(int i = 0; i < n - 1; i++) {
scanf("%d%d%d", &u, &v, &xi);
maze st;
st.color = xi;
st.f = v;
vec[u].push_back(st);
st.f = u;
vec[v].push_back(st);
}
for(int i = 1; i <= n; i++) {
dfs(i, 0, 0);
}
cout<<(sum%1000000007-sum2%1000000007)%1000000007<<endl;
return 0;
}