C. Edgy Trees
ps;知道怎么做,代码不会写。。。。。
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define N 100005
typedef long long ll;
int s;
ll qpow(ll a,ll b){
ll ans=1;
ans=ans%mod;
while(b){
if(b&1) ans=ans*a%mod;
a=a*a%mod;
b/=2;
}
return ans;
}
bool vis[N];
vector<int>g[N];
void dfs(int u){
if(vis[u]) return;
s++;
vis[u]=true;
int n=g[u].size();
for(int i=0;i<n;i++){
dfs(g[u][i]);
}
}
int main()
{
ll n,k;
cin>>n>>k;
int u,v,a,i;
for(i=1;i<=n-1;i++){
scanf("%d %d %d",&u,&v,&a);
if(a==0){
g[u].push_back(v);
g[v].push_back(u);
}
}
ll ans=qpow(n,k);
for(i=1;i<=n;i++){
if(vis[i]) continue;
s=0;
dfs(i);
ans=ans-qpow(s,k);
ans+=mod;
ans%=mod;
}
cout<<ans<<endl;
return 0;
}