关注
作者:ASCII128
链接:https://www.nowcoder.com/discuss/233389?type=post&order=time&pos=&page=1
来源:牛客网
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
struct node
{
int to;
int c;
node(int _to,int _c):to(_to),c(_c){}
};
struct node2
{
int to;
int c;
int num;
node2(int _to,int _c,int _num):to(_to),c(_c),num(_num){}
};
vector<node>g[100010];
vector<node2>G[100010];
bool vis[100010];
void build(int root){
if(vis[root]==1) return;
vis[root]=1;
for(int i=0;i<g[root].size();i++){
if(vis[g[root][i].to]==0){
G[root].push_back(node2(g[root][i].to,g[root][i].c,0));
build(g[root][i].to);
}
}
}
int num[100010],ans=0;
int fast(int a,int b)
{
int ans=1;
while(b)
{
if(b%2==1) ans=1LL*ans*a%mod;
b/=2;
a=1LL*a*a%mod;
}
return ans;
}
int n,k,l,r,c;
void solve(int root)
{
num[root]=1;
for(int i=0;i<G[root].size();i++){
solve(G[root][i].to);
if(G[root][i].c==0) {
num[root]+=num[G[root][i].to];
ans=(ans+mod-fast(num[G[root][i].to],k))%mod;
}
}
ans=(ans+fast(num[root],k))%mod;
}
int main()
{
memset(vis,0,sizeof(vis));
memset(num,0,sizeof(num));
cin>>n>>k;
for(int i=0;i<n-1;i++){
scanf("%d %d %d",&l,&r,&c);
g[l].push_back(node(r,c));
g[r].push_back(node(l,c));
}
build(1);
solve(1);
cout<<(fast(n,k)+mod-ans)%mod<<endl;
} 🤣大佬分享的AC代码
查看原帖
点赞 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 牛客新年AI问运 #
2359次浏览 48人参与
# 刚工作,应该先搞钱or搞成长? #
20726次浏览 159人参与
# 牛客AI体验站 #
15459次浏览 275人参与
# 你觉得第一学历对求职有影响吗? #
229815次浏览 1266人参与
# 找工作中的小确幸 #
80308次浏览 448人参与
# 你觉得技术面多长时间合理? #
168004次浏览 1170人参与
# 实习在多还是在精 #
82658次浏览 509人参与
# 月薪多少能在一线城市生存 #
136278次浏览 898人参与
# 牛友的春节生活 #
10845次浏览 211人参与
# 备战春招/暑实,现在应该做什么? #
7427次浏览 199人参与
# 从夯到拉,锐评职场mentor #
7209次浏览 108人参与
# 实习到现在,你最困惑的一个问题 #
6453次浏览 163人参与
# 春招什么时候投? #
12843次浏览 208人参与
# 制造业的秋招小结 #
143301次浏览 2089人参与
# 电网笔面经互助 #
59635次浏览 476人参与
# 秋招踩过的“雷”,希望你别再踩 #
185609次浏览 1683人参与
# 春节提前走,你用什么理由请假? #
13062次浏览 287人参与
# 距离春招还有一个月,你现在是什么开局? #
8992次浏览 132人参与
# 今年秋招你收到了多少封邮件? #
38227次浏览 280人参与
# 暑期实习什么时候投? #
9211次浏览 197人参与
vivo公司福利 698人发布