F. Drivers Dissatisfaction time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output In one kingdom there are n cities and m two-way roads. Each road connects a pair of cities, and for each road we…
Drivers Dissatisfaction time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output In one kingdom there are n cities and m two-way roads. Each road connects a pair of cities, and for each road we kno…
F - Drivers Dissatisfaction 题目大意:给你n个点,m条边,每个边都有一个权重w,每条边也有一个c表示,消耗c元可以把这条边的权重减1,求最多消耗s元的最小生成树. 思路:因为一条边的权重没有下限所以s元肯定是用在一条边上的. 那么我们先跑一个最小生成树,把这棵最小生成树建出来,然后我们枚举用了 s元之后的边,如果这条边不在树上那么加上这条边之后肯定形成了一个环,最优的方案肯定是删掉这个环中权值最大的边再次变成一棵树. 对于边(u,v)来说,如果把这条边加上,那么删掉的…
P4180 [模板]严格次小生成树[BJWC2010] 题目描述 小C最近学了很多最小生成树的算法,Prim算法.Kurskal算法.消圈算法等等.正当小C洋洋得意之时,小P又来泼小C冷水了.小P说,让小C求出一个无向图的次小生成树,而且这个次小生成树还得是严格次小的,也就是说:如果最小生成树选择的边集是EM,严格次小生成树选择的边集是ES,那么需要满足:(value(e)表示边e的权值)$\sum_{e \in E_M}value(e)<\sum_{e \in E_S}value(e)$ 这下…
在搞LCT之前,我们不妨再看看喜闻乐见的树链剖分. 树链剖分有一道喜闻乐见的例题:NOI2015 软件包管理器 如果你看懂题目了,你就会明白它是叫你维护一个树,这棵树是不会动的,要兹磁子树求和,子树修改,树上路径求和,树上路径修改. 树链剖分就是把一个树剖分成像这样的东西: 一棵树用一坨重链组成,重链之间用轻链连接. 对于树上的每一个点,它和子树大小最大的那个的根节点在同一重链,其他儿子另成一条新重链. 这样可以证明每个点到根至多只有log级这么多段的连续的重链. 然后我们把连续的一坨重链用线段…
潇爷昨天刚刚讲完...感觉得还可以...对着模板打了个模板...还是不喜欢用指针.... 1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MB Submit: 10559 Solved: 4258 [Submit][Status][Discuss] Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结…
本题解并不提供圆方树讲解. 所以不会圆方树的出门右转问yyb 没有修改的话圆方树+链剖. 方点的权值为点双连通分量里的最小值. 然后修改的话圆点照修,每一个方点维护一个小根堆. 考虑到可能被菊花卡死. 我们每一个方点只维护儿子的最小值. 当询问的路径\(lca\)为方点时,\(ans=min(ans,w[fa[lca]])\)即可. #include<iostream> #include<cstring> #include<cstdio> #include<cma…
思路: 恶心的数据结构题-- 首先 我们 链剖 把树 变成序列 再 套一个 区间 第K大就好了-- 复杂度(n*log^4n) //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 88888 #define inf 100000000 int n,q,first[N],next[N*2],v[N*2],t[N],to…
This article is made by Jason-Cow.Welcome to reprint.But please post the writer's address. http://www.cnblogs.com/JasonCow/ 感谢您的关注,赠送数据生成器一个 #include <ctime> #include <cstdio> #include <iostream> #include <algorithm> using namespac…
This article is made by Jason-Cow.Welcome to reprint.But please post the writer's address. http://www.cnblogs.com/JasonCow/ 链剖+线段树 所以为什么 2017.4.8 C题爆零了!!! 我的暴力分呢? 大话西游AC code 假装考试30分拿到了T△T #include <algorithm> #include <iostream> #include <…
This article is made by Jason-Cow.Welcome to reprint.But please post the writer's address. http://www.cnblogs.com/JasonCow/ [NOIP2015]运输计划    Hello!链剖.你好吗? 题意: 给出一棵n个节点的带权树,m对树上点对 现在允许删除一条边,(权值修改为0) 输出: 最小化的点对间最大距离 1.链剖 2.树上差分 3.二分 链剖我就不多说了,就是两dfs 注意…
官方题解: If you choose any n - 1 roads then price of reducing overall dissatisfaction is equal to min(c1, c2, ..cn - 1) where сi is price of reducing by 1 dissatisfaction of i-th edge. So the best solution is to choose one edge and reduce dissatisfactio…
题意:给一张n个点m条边的连通图,每条边(ai,bi)有一个权值wi和费用ci, 表示这条边每降低1的权值需要ci的花费.现在一共有S费用可以用来降低某些边的权值 (可以降到负数),求图中的一棵权值和最小的生成树并输出方案 显然是找到一条边然后将这条边减到最小 先跑一边最小生成树,找到树上最小的一点,然后在枚举其他的边, 加上这条边会产生一个环,所以需要删除这个环上面权值最大的边 这个通过类似于LCA倍增的手法做到, #include <cstdio> #include <cstring…
题意:给出一个图,每条边有权值和花费c,每次花费c能使的权值-1.给出一个预算,求减完权值后的一个最小生成树. 思路:感谢CC大神 有这样一个结论:最佳方案里必定存在一种,预算全部花费全部分配在一条边上.证明显然,对于任意一组解,都可以在内部再分配预算使总费用更小或不变. 于是先求出原图的最小生成树,枚举每条边. 对于在生成树中的,判断使这条边减费是否更优. 不在生成树上的,找出树上从x[i]到y[i]的路径(唯一)上a[i]最大的边,判断删除那条边并加入减费后的(x[i],y[i])是否更优.…
http://codeforces.com/problemset/problem/733/F (题目链接) 题意 给出一张n个点的无向图,每一条变有两个特征值:${w,c}$:分别表示这条边的权值为${w}$,每将这条边的权值减小1需要充${c}$元钱.初始时有${S}$元钱,你可以对任意边充钱使得它的权值${w}$减少,甚至减成负数.现在需要你选出若干条边,使得所有的点都联通并且这些边的权值和在“充了钱”之后最小. Solution codeforces上的题目真是良心题. 想一想,假设我们已…
题意:有n个点,m条边,每条边有不满意度w[i],以及减小一个不满意度代价c[i],问给你s元用来减少代价,找到一个总不满意度最小的生成树,保证有解.(减少后的不满意度可以为负数)思路:显然所有的钱都应该用在生成树中c最小的那条边上先求出以w[i]为权的最小生成树O(nlogn)答案一定是在现在求出的最小生成树基础上换掉一条边 或 不变把所有边进行替换尝试,找到换掉后的最优解.(可以只尝试c不大于mst中最小的c的边)添加一条边后需要尝试换掉,与该边组成环后的最大权的边,找最大权就是找新增边的两…
http://codeforces.com/contest/733/problem/F 题意:给你一些城市和一些路,每条路有不满意程度和每减少一点不满意程度的花费,给出最大花费,要求找出花费小于s的最小生成树中最小的不满意程度 题解:首先明确的是肯定只删除一条路然后其他的找最小生成树即可,但是直接搞复杂度O(m*mlogm)所以先prim扣出一颗最小生成树,然后枚举所有边删这条边,如果在最小生成树上,直接减到贡献即可,如果不在最小生成树上,那么加上这条边,树肯定有环了,我们用lca暴力的扣出这个…
[题目链接]:http://codeforces.com/problemset/problem/733/F [题意] 给你n个点m条边; 让你从中选出n-1条边; 形成一个生成树; (即让n个点都联通); 然后,你有S的预算; 每次可以选择一条边i,然后花费ci的预算,把这条边的权值递减1; (边一开始的权值为wi); 问你最后的最小生成树是多少; [题解] /* 肯定是找某一条边一直减(ci最小的那一个,因为代价最小,又都是减少1); 把m条边按照w升序排; 做个最小生成树; 把最小生成树里面…
思路: 1.树链剖分+用带标记的线段树维护操作(复杂度O(nlog2n)) 2.树链剖分LCA(TarjanLCA等各种LCA)+差分 复杂度(O(n)->O(nlogn)之间) 下面就说说怎么差分-- 把mark[x]++,mark[y]++,mark[lca(xx,yy)]–,mark[fa[lca(xx,yy)]]–; 最后输出的时候要把 不是a[1]的节点–. 搞定~~~ //By SiriusRen #include <cstdio> #include <cstring&…
看错题目了,想成每个城市都可以买一个东西,然后在后面的某个城市卖掉,问最大收益.这个可以类似维护上升序列的方法在O(nlog^3n)的时间复杂度内搞定 这道题用到的一些方法: 1. 可以将有关的线段提取出来,然后一起处理. 2. 线段树可以维护两个方向的信息,这样就可以处理树上有序的东西. /************************************************************** Problem: 3999 User: idy002 Language: C++…
正好练练熟练度..(刷水题谋财害命QAQ) #include<cstdio> #include<iostream> #define ll long long #define R register ll #define ls (tr<<1) #define rs (tr<<1|1) ; using namespace std; inline ll g() { R ret=; register char ch; while(!isdigit(ch=getchar…
P2324 [SCOI2005]骑士精神 CF724B Batch Sort CF460C Present CF482A Diverse Permutation CF425A Sereja and Swaps CF1187C Vasya And Array P3419 [POI2005]SAM-Toy Cars CF196C Paint Tree *Loj #6560 小奇取石子 *CodeChef - CLPERM POJ2689. Prime Distance P1792 [国家集训队]种树…
传送门 树链剖分菜题. 题意简述:给一个无向图,边有边权,每次询问删一条边(对后面的询问无影响)之后的最小生成树. 思路: 先跑一次kruskalkruskalkruskal并把跑出来的最小生成树给链剖了. 然后考虑如果没有删掉树边答案不变,如果删掉一条能够接上的就只有覆盖了这条边的路径,因此对于每条非树边都用来更新一次树边的信息,O(1)O(1)O(1)处理询问即可. 注意要转边为点 代码: #include<bits/stdc++.h> #define ri register int #d…
[SinGuLaRiTy-1035] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 关于树链 树链是什么?这个乍一看似乎很陌生的词汇表达的其实就是在一棵树中从一个节点到另外一个节点的路径.在许多看似复杂的图论问题中,我们实际上只要对其进行适当的处理,把图转化为一棵树,问题就会得到化简,再运用树链的相关思想就可以较为轻松地解决. 树上倍增 所谓的“树上倍增”,其实就是一种记录节点的方法.我们定义一个数组f[i][j],表示节点i的第2^j…
跟去年NOIP某题基本一样. 最小生成树之后,就变成了询问连接两点的路径上的权值最大的边. 倍增LCA.链剖什么的随便搞. 块状树其实也是很简单的,只不过每个点的点权要记录成“连接其与其父节点的边的权值”,然后暴力LCA时不要用LCA的值更新答案了. #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define maxn…
1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 14302  Solved: 5779[Submit][Status][Discuss] Description 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w.我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 I…
4082: [Wf2014]Surveillance Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 260  Solved: 100[Submit][Status][Discuss] Description 给你一个长度为len的环,以及n个区间,要你选择尽量少的区间,使得它们完全覆盖整个环.问最少要多少个区间. Input 输入数据的第一行是两个整数len和n,代表环的长度以及区间个数.之后n行描述的是n个区间,每个区间分别用一对数字(a,b)…
4353: Play with tree Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 31  Solved: 19[Submit][Status][Discuss] Description 给你一棵包含N个节点的树,设每条边一开始的边权为0,现在有两种操作: 1)给出参数U,V,C,表示把U与V之间的路径上的边权变成C(保证C≥0) 2)给出参数U,V,C,表示把U与V之间的路径上的边权加上C.但是如果U至V之间路径某条边的边权加上C小于0,那…
4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 703  Solved: 461[Submit][Status][Discuss] Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家物流公司, 该公司有很多个运输计划,每个运输计划形如:有一艘物流飞船需要从 ui…
4127: Abs Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 381  Solved: 132[Submit][Status][Discuss] Description 给定一棵树,设计数据结构支持以下操作 1 u   v d 表示将路径 (u,v) 加d 2 u v 表示询问路径 (u,v) 上点权绝对值的和 Input 第一行两个整数n和m,表示结点个数和操作数 接下来一行n个整数a_i,表示点i的权值 接下来n-1行,每行两个整数u,v…