链接

[https://codeforces.com/contest/1139/problem/C]

题意

给你n个点,n-1个边,无向的。有red和black的。

k表示经过这k个点。可以跨其他点

分析

先算所有的,再减去不符合即可以了。不符合就是都走0的那种

用dfs求联通块并记录该块有多少个点就可以了,看代码吧

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=2e5+10;
const ll mod=1e9+7;
ll po(ll x,ll y){
ll ba=x,ans=1;
while(y){
if(y&1) ans=(ans*ba)%mod;
ba=(ba*ba)%mod;
y>>=1;
}
return ans;
}
vector<int> ve[N];
bool vis[N];
ll cnt;
void dfs(int i){
if(vis[i]) return;
vis[i]=1;
cnt++;
for(int j=0;j<ve[i].size();j++)
dfs(ve[i][j]);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
//freopen("in.txt","r",stdin);
ll n,k;
cin>>n>>k;
int u,v,x;
memset(vis,0,sizeof(vis));
for(int i=1;i<n;i++){
cin>>u>>v>>x;
if(x==0)
ve[u].push_back(v),ve[v].push_back(u);
}
ll sum=po(n,k);
for(int i=1;i<=n;i++)
{
cnt=0;
if(!vis[i])
{
dfs(i);
sum-=po(cnt,k);
sum+=mod;
sum%=mod;
}
}
cout<<sum<<endl;
return 0;
}

最新文章

  1. Linux indent
  2. 常用Linux命令记录
  3. 【2016-11-10】【坚持学习】【Day23】【Socket 编程初步了解】
  4. Oracle同一数据库实例不同用户间的数据迁移
  5. mybatis(一)环境的搭建
  6. GUID
  7. [C] zintrin.h : 智能引入intrinsic函数。支持VC、GCC,兼容Windows、Linux、Mac OS X
  8. Android SDK离线安装方法详解(加速安装) 转
  9. Linq常用查询运算符
  10. javascript-for-loop-example--reference
  11. C#中Predicate的一点理解
  12. Servlet中的过滤器Filter详解
  13. 微信开发获取media_id错误码汇总
  14. Shader 入门笔记(一)
  15. css3动画--位移加阴影
  16. ECMA Script 6_行为重定义 Proxy
  17. 完整的多文件上传实例(java版)
  18. redis整合Spring集群搭建及业务中的使用
  19. C#--整型与字节数组byte[]之间的转换
  20. Oracle之ora-01031 insufficient privileges

热门文章

  1. MSSQL 如何采用sql语句 获取建表字段说明、字段备注、字段类型、字段长度
  2. [转载] erp开发-数据查询优化方法
  3. Powershell测试端口状态
  4. xpath语法大全
  5. JSON Web Tokens简单学习
  6. JavaScript or JQuery 获取服务器时间
  7. VueJs入门(一)
  8. mysql 中的内置函数
  9. C语言 用π/4=1-1/3+1/5-1/7+... 求π的近似值
  10. 【Linux基础】alias命令指定别名