这个题目太长了,我就放个连接算了: http://codeforces.com/problemset/problem/1139/C

题目分析

这个题把题意读懂了就好弄了,本以为是最短路的,但应该是求连通块的。

要在一个有n个结点的树上找一个长度为k,且由结点组成的序列[a1,a2....ak],代表行路的路线a1- a2 - .... - ak , 任意两个结点之间需要用最短的距离走到(还以为要求多元最短路呢),如果在这个行走过程中经过了一条黑色边,那么这个序列就满足题目的条件,问你一共有多少这样的序列。

由于每一个序列中的元素可以重复出现,也就是说任意的ai都有n个取值,所以总序列个数为n^k个,我们应该可以想到,除去没有经过黑色边的序列,剩余的序列都可以满足条件,那我们要如何让一个序列不会经过黑色边呢?

如果我们删除了所有的黑色边,由于边的总数为n-1条,那么可能出现多个由红色边相连的连通块,那么由这个连通块内的结点组成的长度为k的序列,必然不满足条件,那我们将所有的这样的连通块全部找出,就得到了所有的不经过黑色的边的序列,最后用总序列数n^k减去这些没有经过黑色边的连通块,就是我们要求的答案了。

然后注意一些细节问题,由于我们不断地求a^k,所以添加了一个快速幂算法来加速;然后还需要用dfs求连通块的结点数.

代码区

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include <vector>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int Max = 1e6 + 10;
const int mod = 1e9 + 7;vector<int>v[Max];      //记录红色色边
bool vis[Max];          //vis[x]记录点是否已经被访问ll pow_fast(ll a, ll k)
{ll ans = 1;while (k != 0){if (k & 1 != 0)ans = (ans*a) % mod;a = a * a%mod;k >>= 1;}return ans;
}void dfs(int s,ll &ans)
{vis[s] = true;ans++;for (int i = 0;i < v[s].size();i++){int e = v[s][i];if (vis[e])continue;dfs(e,ans);}
}int main()
{ll n, k;while (scanf("%I64d%I64d", &n, &k) != EOF){for(int i = 1; i <= n ; i++){v[i].clear();}memset(vis, false, sizeof(vis));for (int i = 1; i < n;i++){int s, e, m;scanf("%d%d%d", &s, &e, &m);if (m)continue;                                         //黑边不记录,这样我们就将所有的点由红边连接,导致出现多个由红边连接的连通块v[s].push_back(e);v[e].push_back(s);}ll ans = pow_fast(n, k);                                //总共走k个点,每个结点都是n个结点中的任意一个,故总数为n^kfor (int i = 1; i <= n; i++){if (!vis[i])                             //没有走过,也就是一个新的连通块{ll num = 0;                       //记录连通在一起的红色道路dfs(i,num);                       //获取纯红边连接的结点ans = (ans - pow_fast(num, k) + mod) % mod;   //减去全部由红色边组成的答案//也就是用num个点,走动k次}}printf("%I64d\n", ans);}return 0;
}

CF 1139C Edgy Trees相关推荐

  1. CodeForces - 1139C Edgy Trees (快速幂+dfs)

    题目:CodeForces - 1139C 题意:一个n个节点的无向图,有n-1条边每条边是黑色或者红色,现在统计包含k个点(不需要连续)的路中至少有1条黑边的路径数目 分析:总共有n^k条路径,将所 ...

  2. codeforces 1139c Edgy Trees 【并查集 】

    题意: 一颗有n个节点的树 树的边为红色或者黑色 给你节点数 n  和 k 让你求出长度为k的 1 - n 的全排列 作为路径在该树上  经过黑色的边 的数量  答案 mod 1e9+7 题解: 将思 ...

  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. C. Edgy Trees(并查集+细节)

    C. Edgy Trees 思路: 总共有ans = POW(n,k)中可能,然后排出所有不可能的情况,每次序列中全部为红色或者只有一个点 的情况就不用考虑,所以可以用红色边建立连通图,然后枚举每一连 ...

  5. # Codeforces Round #548 (Div. 2)C Edgy Trees

    Codeforces Round #548 (Div. 2)C Edgy Trees 题目传送门 You are given a tree (a connected undirected graph ...

  6. Edgy Trees CodeForces - 1139C

    题目链接:http://codeforces.com/problemset/problem/1139/C 题目大意:给了一棵树,n个点,m条边.让从中选k个点,使得从a1到a2,a2到a3,ak-1到 ...

  7. 1139C C. Edgy Trees

    You are given a tree (a connected undirected graph without cycles) of n vertices. Each of the n−1 ed ...

  8. Codeforces Round #548 (Div. 2)C. Edgy Trees 并查集

    codeforces 1139C 题目链接:http://codeforces.com/contest/1139/problem/C 题意: 给你一个n个结点n-1条边的无向连通图,由红边和黑边组成. ...

  9. C. Edgy Trees Codeforces Round #548 (Div. 2) 【连通块】

    一.题面 here 二.分析 这题刚开始没读懂题意,后来明白了,原来就是一个数连通块里点数的问题.首先在建图的时候,只考虑红色路径上的点.为什么呢,因为为了不走红色的快,那么我们可以反着想只走红色的路 ...

最新文章

  1. t1plus 用什么服务器系统,T1 Plus商贸宝普及版与用友T1系统哪个更好呢?
  2. 在VS中建立一个易于管理的C++工程
  3. C# 获取utc时间,以及utc datetime 互相转化
  4. 《重构:改善既有代码的设计》阅读笔记
  5. docker swarm的应用----docker集群的构建
  6. 计算机管理 没有适当的权限,提示没有合适的权限访问怎么办
  7. CentOS7部署Nginx
  8. hge引擎配置登录器教程_HGEM2引擎登录器列表格式TXT
  9. Mac与Linux SSH无密登陆(互信)
  10. mysql 复制表结构或创建新表
  11. 神经内科常用评估量表,神经功能缺损评分量表
  12. 引入 ECharts和Bootstrap的bootcdn样式表路径
  13. 三种不同组网方式,组建WIFI全覆盖
  14. 解决iphone在微信内置浏览器中看不到video标签
  15. Python实现简易音频播放器
  16. Java_输入输出(Scanner)
  17. Spring事务报错: org.springframework.transaction.UnexpectedRollbackException
  18. python学习:键盘输入一个或多个城市名,转换为拼音列表
  19. 数据结构和算法——用动态规划求解最短路径问题
  20. QTabWidget 样式例子

热门文章

  1. 活动报名 | 加州大学圣地亚哥分校商静波:如何通过极弱监督来完成海量文本的结构化?...
  2. 输入三角形的3条边长(均为正整数),如果不能构成一个三角形,则输出“not a triangle”;如果能够构成一个直角三角形,则输出“yes”;如果不能构成直角三角形,则输出“no”。
  3. 计算机逻辑运算实验总结,算术逻辑运算实验报告(共10篇).doc
  4. PE文件结构与程序装载
  5. golang学习之negroni/gizp源码分析
  6. 简单阅读golang的net/http包和Negroni的源码
  7. 蓝桥杯 青少年创意编程大赛 scratch 组(一)
  8. Python数据分析训练营——Python数据分析之Panads-1
  9. Excel插入图片实现单击放大或缩小
  10. Jenkins基础:API:10:使用API更新进行节点的连接和断开