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