Lucky Tree
题目:http://codeforces.com/problemset/problem/109/C
题意:一棵树n个节点,组成一个图,每条边都有权值,对于i、j、k三个数,计算所有的 i 到 j 和 i 到 k 的路径上有幸运数的三元组个数。
题解:用并查集来做,对于任意节点 i ,找出与 i 连通的且某段路径的权值是幸运数的点的个数num,则总个数即是1~n的num*(num-1).但是因为有些点之间是间接连接的,无法直接判断,所以用并查集来更新,计算出每个点的根节点的num值(额,每个点的num值也无法直接计算,因为有的间接连接的点也符合,但可以通过两点的权值计算点与 i 的不符合的点的个数,用n减去它就是所需的 num)。在后面计算总数时,遍历每个点时用其根节点的num值来计算。
这两天整个人敲题都是迷的.........
1 #include <map>
2 #include <stack>
3 #include <queue>
4 #include <cmath>
5 #include <string>
6 #include <limits>
7 #include <cstdio>
8 #include <vector>
9 #include <cstdlib>
10 #include <cstring>
11 #include <iostream>
12 #include <algorithm>
13 #define Scc(c) scanf("%c",&c)
14 #define Scs(s) scanf("%s",s)
15 #define Sci(x) scanf("%d",&x)
16 #define Sci2(x, y) scanf("%d%d",&x,&y)
17 #define Sci3(x, y, z) scanf("%d%d%d",&x,&y,&z)
18 #define Scl(x) scanf("%I64d",&x)
19 #define Scl2(x, y) scanf("%I64d%I64d",&x,&y)
20 #define Scl3(x, y, z) scanf("%I64d%I64d%I64d",&x,&y,&z)
21 #define Pri(x) printf("%d\n",x)
22 #define Prl(x) printf("%I64d\n",x)
23 #define Prc(c) printf("%c\n",c)
24 #define Prs(s) printf("%s\n",s)
25 #define For(i,x,y) for(int i=x;i<y;i++)
26 #define For_(i,x,y) for(int i=x;i<=y;i++)
27 #define FFor(i,x,y) for(int i=x;i>y;i--)
28 #define FFor_(i,x,y) for(int i=x;i>=y;i--)
29 #define Mem(f, x) memset(f,x,sizeof(f))
30 #define LL long long
31 #define ULL unsigned long long
32 #define MAXSIZE 100005
33 #define INF 0x3f3f3f3f
34 const int mod=1e9;
35 const double PI = acos(-1.0);
36
37 using namespace std;
38
39 int pre[MAXSIZE];
40 int num[MAXSIZE];
41 int find(int x)
42 {
43 if(x!=pre[x])
44 return pre[x]=find(pre[x]);
45 return x;
46 }
47 int check(int n)
48 {
49 while(n)
50 {
51 if(n%10!=4&&n%10!=7)
52 return 0;
53 n/=10;
54 }
55 return 1;
56 }
57 void hhh(int x,int y)
58 {
59 x=find(x);
60 y=find(y);
61 if(x==y)
62 return ;
63 pre[y]=x;
64 num[x]+=num[y];
65 }
66 int main()
67 {
68 int n;
69 Sci(n);
70 For_(i,1,n)
71 {
72 num[i]=1;
73 pre[i]=i;
74 }
75
76 int a,b,c;
77 For_(i,1,n-1)
78 {
79 Sci3(a,b,c) ;
80 if(!check(c))
81 {
82 hhh(a,b);
83 }
84 }
85 LL sum=0;
86 For_(i,1,n)
87 {
88 int tmp=n-num[ find( i) ];
89 sum+=(LL)(tmp-1)*tmp;//这个地方的(LL)不能省,乘积结果应该是会超出int范围
90 }
91 Prl(sum);
92 return 0;
93 }
Lucky Tree的更多相关文章
- CF109 C. Lucky Tree 并查集
Petya loves lucky numbers. We all know that lucky numbers are the positive integers whose decimal re ...
- CodeForces 109C 树形DP Lucky Tree
赶脚官方题解写得挺清楚的说,=_= 注意数据范围用long long,否则会溢出. #include <iostream> #include <cstdio> #include ...
- codeforces 110E Lucky Tree
传送门:https://codeforces.com/contest/110/problem/E 题意:给你一颗树,节点与节点之间的边有一个边权,定义只由4和7组成的数字是幸运数字,现在要你求一共有多 ...
- Codeforces Beta Round 84 (Div. 2 Only)
layout: post title: Codeforces Beta Round 84 (Div. 2 Only) author: "luowentaoaa" catalog: ...
- CF dp 题(1500-2000难度)
前言 从后往前刷 update 新增 \(\text{\color{red}{Mark}}\) 标记功能,有一定难度的题标记为 \(\text{\color{red}{红}}\) 色. 题单 (刷过的 ...
- 竞赛题解 - Broken Tree(CF-758E)
Broken Tree(CF-758E) - 竞赛题解 贪心复习~(好像暴露了什么算法--) 标签:贪心 / DFS / Codeforces 『题意』 给出一棵以1为根的树,每条边有两个值:p-强度 ...
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- SAP CRM 树视图(TREE VIEW)
树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...
- 无限分级和tree结构数据增删改【提供Demo下载】
无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...
- 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
随机推荐
- chrom jsonview的使用
在开发中,我们可能要为不同的系统提供接口,并以说明文档的形式提供接口说明,但我们提供的返回json往往会在页面上乱成一团. 这里我们推荐chrome浏览器的小插件jsonview,他不但有利于我们对接 ...
- 【每日一题】【双端降序队列Deque】2021年12月28日-239. 滑动窗口最大值
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 来源:力扣(L ...
- 基于EasyCode定制Mybatisplus全自动单表实现:新增/批量新增/修改/批量删除/分页查询/ID查询
基于EasyCode定制Mybatisplus全自动单表实现CRUD接口 分页查询 ID查询 新增 批量新增 修改 批量删除 注意使用了MybatisPlus的自动填充功能,和insertBatchS ...
- 云原生架构(二)环境搭建(Mac上安装Docker+Kubernetes+Istio一条龙)
一.背景 Istio 项目由 Google 和 IBM 的团队与 Lyft 的 Envoy 团队合作启动.它已经完全在 GitHub 上公开开发.目前已经是"Service Mesh服务网格 ...
- Dijkstra 算法说明与实现
Dijkstra 算法说明与实现 作者:Grey 原文地址: 博客园:Dijkstra 算法说明与实现 CSDN:Dijkstra 算法说明与实现 问题描述 问题:给定出发点,出发点到所有点的距离之和 ...
- 痞子衡嵌入式:我被邀请做贸泽电子&与非网联合推出的《对话工程师》节目嘉宾
<对话工程师>是「贸泽电子」赞助.「与非网」制作的一档网络节目,自2022年11月起,邀请不同技术领域的资深工程师,聊聊开发过程中的经验感悟,栏目共 10 期,痞子衡有幸被邀请做了第 4 ...
- STM32用PWM波控制呼吸灯代码
pwm.c #include "pwm.h" //TIM3-CH3 //PB0 void PWM_Config(void) { GPIO_InitTypeDef GPIO_Init ...
- C++进阶(哈希)
vector容器补充(下面会用到) 我们都知道vector容器不同于数组,能够进行动态扩容,其底层原理:所谓动态扩容,并不是在原空间之后接续新空间,因为无法保证原空间之后尚有可配置的空间.而是以原大小 ...
- Mybatis-9.28
Mybatis-9.28 环境: JDK1.8 Mysql 5.7 maven 3.6.1 IDEA 回顾: JDBC Mysql Java基础 Maven Junit SSM框架:配置文件的. 最好 ...
- CLI框架:klish安装与使用
在通信设备领域,思科的路由器设备可以用CLI进行操作.这里介绍的开源项目klish是思科CLI风格(CISCO-like CLI)的框架.命令配置文件为xml格式. 源码:pkun/klish: Th ...