[国家集训队2012]tree(陈立杰)】的更多相关文章

[国家集训队2012]tree(陈立杰) 题目 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树.题目保证有解. INPUT 第一行V,E,need分别表示点数,边数和需要的白色边数.接下来E行每行s,t,c,col表示这边的端点(点从0开始标号),边权,颜色(0白色1黑色). OUTPUT 一行表示所求生成树的边权和. SAMPLE INPUT 2 2 1 0 1 1 1 0 1 2 0 OUTPUT 2 数据规模 0:V<=101,2,3:V<=…
tree 时间限制: 3 Sec  内存限制: 512 MB 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. 输入 第一行V,E,need分别表示点数,边数和需要的白色边数. 接下来E行,每行s,t,c,col表示这边的端点(点从0开始标号),边权,颜色(0白色1黑色). 输出 一行表示所求生成树的边权和. V<=50000,E<=100000,所有数据边权为[1,100]中的正整数. 样例输入 2 2 1 0 1 1…
我是萌萌的传送门 我是另一个萌萌的传送门 脑残错误毁一下午…… 其实题解早就烂大街了,然而很久之前我只知道是二分答案+主席树却想不出来这俩玩意儿怎么一块儿用的……今天又翻了几篇题解才恍然大悟,是把权值排序之后依次插入序列,用主席树维护连续和……(我菜爆了……= =) 还是讲讲大体思路吧,首先二分答案M,把>=M的元素标为1,<M的标为-1,然后判定满足条件的最大子串和是否>=0,是则说明判定标准可行,否则不可行,调整下一次二分即可.但是直接暴力标记肯定会T,所以尝试对所有判定标准维护线段…
[问题描述] 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2:将树中原有的边(u1,v1)删除,加入一条新边(u2,v2),保证操作完之后仍然是一棵树: * u v c:将u到v的路径上的点的权值都乘上自然数c: / u v:询问u到v的路径上的点的权值和,求出答案对于51061的余数. [输入格式] 第一行两个整数n,q 接下来n-1行每行两个正整数u,v,描述这棵…
Description 一棵n个点的树,每个点的初始权值为1.对于这棵树有q个操作,每个操作为以下四种操作之一: + u v c:将u到v的路径上的点的权值都加上自然数c: - u1 v1 u2 v2:将树中原有的边(u1,v1)删除,加入一条新边(u2,v2),保证操作完之后仍然是一棵树: * u v c:将u到v的路径上的点的权值都乘上自然数c: / u v:询问u到v的路径上的点的权值和,求出答案对于51061的余数. Input 第一行两个整数n,q 接下来n-1行每行两个正整数u,v,…
LCT裸题 注意打标记之间的影响就是了 这个膜数不会爆unsigned int #include<cstdio> #include<cstdlib> #include<algorithm> #include<cctype> using namespace std; #define rg register #define il inline #define sta static #define vd void #define int unsigned int…
http://cogs.pro:8080/cogs/problem/problem.php?pid=1763 二分答案x 把区间内>=x的数设为1,<x的数设为-1 左端点在[a,b]之间,右端点在[c,d]之间的子序列中,若中位数>=x, 那么 [b+1,c-1]的区间和+[a,b]的最大右子段和+[c,d]的最大左子段和>=0 查询可以用线段树 多组询问,不能每一次二分都重设1和-1 所以用主席树 其中第i棵线段树表示<=i的都被设成了-1 因为主席树是线段树的前缀和,所…
题目链接 luogu P2619 [国家集训队2]Tree I 题解 普通思路就不说了二分增量,生成树check 说一下坑点 二分时,若黑白边权有相同,因为权值相同优先选白边,若在最有增量时出现黑白等权边则更新出 > 和 = 最小值等价,那么不会更新到 = 情况, 因为等价,那么处理时只需看做把等价的黑白两边交换即可 需要每次直接减去 增量 * need 的价值 代码 #include<cstdio> #include<algorithm> const int maxn =…
[国家集训队2012]JZPFAR 题目 平面上有n个点.现在有m次询问,每次给定一个点(px, py)和一个整数k,输出n个点中离(px, py)的距离第k大的点的标号.如果有两个(或多个)点距离(px, py)相同,那么认为标号较小的点距离较大. INPUT 第一行,一个整数n,表示点的个数.下面n行,每行两个整数x_i, y_i,表示n个点的坐标.点的标号按照输入顺序,分别为1..n.下面一行,一个整数m,表示询问个数.下面m行,每行三个整数px_i, py_i, k_i,表示一个询问.…
P2619 [国家集训队2]Tree I 每次二分一个$x$,每条白边加上$x$,跑最小生成树 统计一下满足条件的最小值就好了. to me:注意二分不要写挂 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ],ans,tt; ],b[]; inline bool cmp(edge A,edge B){return (…