题目

题目链接

给一颗树,每条边都是红或黑的。问有多少种大小为kkk的序列[a1,a2...,ak][a_1,a_2...,a_k][a1​,a2​...,ak​]满足,从a1a_1a1​到a2a_2a2​,从a2a_2a2​到a3a_3a3​… …从ak−1a_k-1ak​−1到aka_kak​,至少经过一条黑边一次。

题解

只需求出所有只包含红边的连通块大小,然后用所有情况减去只在红色连通块中的情况即可。

所有情况即nkn^knk。

不包含黑边的情况:求出的第iii个只包含红边的连通块大小为SSS,那么这个连通块可以有SkS^kSk个贡献。

因此,答案就是nk−S1k−S2k...−Smkn^k-S_1^k-S_2^k...-S_m^knk−S1k​−S2k​...−Smk​。

代码

/** @Author: hesorchen* @Date: 2020-11-26 09:12:46* @LastEditTime: 2021-02-04 21:35:52* @Description: 栽种绝处的花*/
#include <bits/stdc++.h>
using namespace std;const int mod = 1000000007;
long long qpow(long long a, long long b)
{long long res = 1;while (b){if (b & 1)res = res * a % mod;b /= 2;a = a * a % mod;}return res;
}
struct node
{int v, w, next;
} Edge[200010];int head[100010], ct = 1;
void add(int v, int u, int w)
{Edge[ct].v = v;Edge[ct].w = w;Edge[ct].next = head[u];head[u] = ct++;
}
vector<int> siz;
bool vis[100010];int DFS(int s)
{int sum = 1;for (int i = head[s]; i; i = Edge[i].next){if (!vis[Edge[i].v] && !Edge[i].w){vis[Edge[i].v] = 1;sum += DFS(Edge[i].v);}}return sum;
}int main()
{int n, k;cin >> n >> k;for (int i = 1; i < n; i++){int u, v, w;scanf("%d %d %d", &u, &v, &w);add(u, v, w);add(v, u, w);}for (int i = 1; i <= n; i++)if (!vis[i]){vis[i] = 1;siz.push_back(DFS(i));}long long ans = qpow(n, k);for (auto it : siz)ans = (ans - qpow(it, k) + mod) % mod;cout << ans << endl;return 0;
}

CF1139C Edgy TreesDFS求连通块大小、思维相关推荐

  1. DFS求连通块数目(深搜)

    DFS求连通块数目 这里认为,连通块是包括斜对角线的路径连通的块. 测试数据 5 5 ****@ *@@*@ *@**@ @@@*@ @@**@ 计算通过@相连的连通块的个数 测试输出: 2 样例代码 ...

  2. 求连通块个数(使用并查集)

    并查集求连通块个数的模板 #include<bits/stdc++.h>using namespace std;const int maxn = 1e5+5; vector<int& ...

  3. 【Codeforces Round #548(Div. 2)】Edgy Trees(数学+bfs求连通块)

    题目链接 C. Edgy Trees time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. UVa572 Oil Deposits DFS求连通块

    技巧:遍历8个方向 for(int dr = -1; dr <= 1; dr++)for(int dc = -1; dc <= 1; dc++)if(dr != 0 || dc != 0) ...

  5. *【ZOJ - 3781】Paint the Grid Reloaded(dfs求连通块缩点,bfs求最短路,建图技巧)

    题干: Leo has a grid with N rows and M columns. All cells are painted with either black or white initi ...

  6. [uva]AncientMessages象形文字识别 (dfs求连通块)

    非常有趣的一道题目,大意是给你六种符号的16进制文本,让你转化成二进制并识别出来 代码实现上参考了//http://blog.csdn.net/u012139398/article/details/3 ...

  7. POJ 2386 dfs求连通块

    题目: 由于近期的降雨,雨水汇集在农民约翰的田地不同的地方.我们用一个 的网格图表示.每个网格中有水(W) 或是旱地(.).一个网格与其周围的八个网格相连,而一组相连的网格视为一个水坑.约翰想弄清楚他 ...

  8. 【CF1638C】Inversion Graph(连通块,思维题)

    [题目描述] 现在有一个序列p1,p2,-,pnp_1,p_2,\dots ,p_np1​,p2​,-,pn​,你需要构建一个无向图,规则是:当i<ji<ji<j且pi>pjp ...

  9. 求连通块的数量(dfs、bfs)

    AC代码: 1.bfs import javax.swing.*; import java.io.BufferedReader; import java.io.BufferedWriter; impo ...

最新文章

  1. css电子商务管理_从毕业生的角度看电子商务专业
  2. Tom Ryaboi
  3. 软件测试2019:第一次作业
  4. C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\root\文件不断增长,如何处理?...
  5. 美国WH在明尼苏达州最大光伏阵列完工
  6. 浏览器对F5的微观处理
  7. 【包邮送书活动】20210924期-开奖通知
  8. Sql Server2008中自定义函数调用存储过程解决方案
  9. 肝火旺的人,哪些食物打死都不要碰?
  10. putty怎么更改为中文_putty中文显示乱码解决方法
  11. 证件OCR识别360度全面解析
  12. STM32---IAPISP介绍
  13. 计算机二级vb上机题,计算机二级考试VB上机模拟题及答案
  14. 免费文本转语音(在线文本转语音)
  15. 二叉树的遍历(递归、栈、morris莫里斯算法)三种方法
  16. vscode使用vetur解决代码换行、格式化、常量问题
  17. [转载]怎样做颠覆式创新?
  18. 腾讯、阿里、华为等各大互联网公司年终奖到底发了多少?
  19. 常用的console 的方法,你真的了解 console 吗
  20. B端产品经理如何快速了解并分析陌生领域的产品

热门文章

  1. 桌面内存管理器(dwn.exe)占用内存过高时怎么办?
  2. 人工智能英文缩写怎么读,人工智能英文缩写大全
  3. 盘点 10大 数据库!
  4. 【PBR系列七】基于物理的环境光照(下):镜面反射 IBL(Specular IBL)
  5. mybatis报错:argument type mismatch
  6. java实现手写签名,Android实现手写签名
  7. 橙光游戏c语言代码,橙光游戏一
  8. Win10搭建Web局域网文件共享库
  9. 论文阅读:How Does NLP Benefit Legal System:A Summary of LAI如何使用NLP技术帮助法律智能:关于法律智能的综述
  10. java 执行Linux命令并打印执行结果