P4149 [IOI2011]Race 题目描述 给一棵树,每条边有权.求一条简单路径,权值和等于 KK,且边的数量最小. 输入格式 第一行包含两个整数 n, Kn,K. 接下来 n - 1n−1 行,每行包含三个整数,表示一条无向边的两端和权值. 注意点的编号从 00 开始. 输出格式 输出一个整数,表示最小边数量. 如果不存在这样的路径,输出 -1−1. 输入输出样例 输入 #1复制 4 3 0 1 1 1 2 2 1 3 4 输出 #1复制 2 说明/提示 保证 n \leqslant 2…
洛谷P4149 [IOI2011]Race 点分治作用(目前只知道这个): 求一棵树上满足条件的节点二元组(u,v)个数,比较典型的是求dis(u,v)(dis表示距离)满足条件的(u,v)个数. 算了自己懒得写了,安利几个blog吧: https://www.cnblogs.com/LadyLex/p/8006488.html https://blog.csdn.net/qq_39553725/article/details/77542223 https://blog.csdn.net/zzk…
题目大意:给一棵树,每条边有边权.求一条简单路径,权值和等于$K$,且边的数量最小. 题解:点分治,考虑到这是最小值,不满足可减性,于是点分中的更新答案的地方计算重复的部分要做更改,就用一个数组记录前面的答案.更新答案的时候只从已经访问过的部分来转移. 卡点:一个地方没有$return$,导致$RE$ C++ Code: #include <cstdio> #define maxn 200010 #define maxk 1000010 const int inf = 0x3f3f3f3f;…
题目描述 给一棵树,每条边有权.求一条简单路径,权值和等于 KK ,且边的数量最小. 输入输出格式 输入格式:   第一行:两个整数 n,kn,k . 第二至 nn 行:每行三个整数,表示一条无向边的两端和权值 (注意点的编号从 00 开始).   输出格式:   一个整数,表示最小边数量. 如果不存在这样的路径,输出 -1−1 .   输入输出样例 输入样例#1:  4 3 0 1 1 1 2 2 1 3 4 输出样例#1:  2 说明 n\le 200000,K\le 1000000n≤20…
正解:点分治 解题报告: 传送门$QwQ$ 昂先不考虑关于那个长度的限制考虑怎么做? 就开个桶,记录所有边的取值,每次加入边的时候查下是否可行就成$QwQ$ 然后现在考虑加入这个长度的限制?就考虑把这个桶,本来是个$bool$数组记录可行嘛,现在就改成$int$数组记录最小长度 然后就做完辣,,,?$QwQ$ #include<bits/stdc++.h> using namespace std; #define il inline #define int long long #define…
[BZOJ2599][IOI2011]Race Description 给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, K <= 1000000 Input 第一行 两个整数 n, k第二..n行 每行三个整数 表示一条无向边的两端和权值 (注意点的编号从0开始) Output 一个整数 表示最小边数量 如果不存在这样的路径 输出-1 Sample Input 4 3 0 1 1 1 2 2 1 3 4 Sample Output 2 题解:本题大…
P2634 [国家集训队]聪聪可可 题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)……遇到这种问题,一般情况下石头剪刀布就好了,可是他们已经玩儿腻了这种低智商的游戏. 他们的爸爸快被他们的争吵烦死了,所以他发明了一个新游戏:由爸爸在纸上画n个“点”,并用n-1条“边”把这n个“点”恰好连通(其实这就是一棵树).并且每条“边”上都有一个数.接下来由聪聪和可可分别随即选一个点(当然他们选点时是看不到这棵…
题目:https://www.luogu.org/problemnew/show/P4149 第一道点分治! 点分治大约是每次找重心,以重心为根做一遍树形dp:然后对于该根的每个孩子,递归下去.递归之前把该根的vis设成1,就相当于删掉该点这边的这部分. 对于这道题,要开一个1e6的桶,就不能给每个节点都开了:所以弄一个全局的,在递归给孩子之前都赋成初值就行了. 注意要弄完一个孩子再把它的点的值加到该根的数组里,作为“之前孩子的值”:而且递归之前赋初值memset也比较慢,开一个栈之类的就都好了…
洛谷题面传送门 神仙题. 首先看到这样两棵树的题目,我们肯定会往动态树分治的方向考虑.考虑每次找出 \(T_2\) 的重心进行点分治.然后考虑跨过分治中心的点对之间的连边情况.由于连边边权与两棵树都有关,直接处理这个"跨过重心"不太方便.不过注意到一个性质,那就是对于同一棵子树中的两个点 \(x,y\),如果我们直接将它们的边权设为 \(dep_x+dep_y+\text{dist}(x,y)\),其中 \(dep_x\) 为 \(x\) 到分治重心的距离,\(\text{dist}(…
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含三个整数N.M.P,分别表示该数列数字的个数.操作的总个数和模数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数乘上k 操作2: 格式:…