[CF960F]Pathwalks】的更多相关文章

题目大意:给你一张$n$个点$m$条边的带权有向图,可能有重边和自环.边会按照顺序给出.让你求出一条最长的路径,使得路径上的边满足边权和出现的时间严格递增.路径可以重复经过同一个点. 想办法把它转化成序列上的最长上升序列 我们如果按顺序加边,那么边做边求是符合边的出现时间递增的要求的 所以当给你一条边$a$->$b$边权为$c$时,我们要在合理的复杂度内查到到$a$点边权小于$c$的最长上升序列 然后用它去更新答案和到$b$边权小于等于$c$的最大值 这显然是个线段树,然后我们再搞个动态开点,完…
在今天三黑(恶意评分刷上去的那种)两紫的智推中,突然出现了P3834 [模板]可持久化线段树 1(主席树)就突然有了不详的预感2333 果然...然后我gg了!被大佬虐了! hdu 2665 Kth number 题意就不写了,太经典了(可我还是不会这题,我太菜了) 大佬的题解写的太神仙了,我这么菜的人都看懂了2333,所以我就不写了... 不过这题是真的坑啊...老师在上面讲的时候,我们开始提交(他们交主席树,我交整体二分)然后等讲完我们还没过23333 MLE.TLE.WA(可能还有CE)轮…
960F - Pathwalks 思路: ORZ 杜老师 用map写1e5个树状数组,骚操作 记Q为query和update次数,则节点个数约为Q*log(N) 代码: #include<bits/stdc++.h> using namespace std; #define LL long long #define pb push_back #define mem(a, b) memset(a, b, sizeof(a)) ; map<int, int> bits[N]; int…
[题目]F. Pathwalks [题意]给定n个点m条边的有向图,可能不连通有重边有自环.每条边有编号 i 和边权 wi ,求最长的路径(可以经过重复节点)满足编号和边权都严格递增.n,m,wi<=10^5. [算法]主席树+DP [题解]这个和LIS十分类似,只要在考虑LIS的树状数组做法的前提下多考虑节点搭配问题,即f[i]=f[j]+1还需要e[j].v=e[i].u. 所以对每个节点建可持久化线段树,然后DP即可.(当然也可以用可持久化树状数组) 复杂度O(n log n). #inc…
题意: 求树上最长上升路径 解析: 树状数组版: 998ms edge[u][w] 代表以u为一条路的终点的小于w的最长路径的路的条数 · 那么edge[v][w] = max(edge[u][w-1]) + 1; 因为w最小是0  所以所有的w都+1 #include <bits/stdc++.h> using namespace std; , INF = 0x7fffffff; int n, m, maxx = -INF; map<int, int> edge[maxn]; i…
题目传送门:960F 思路: 题目给人的感觉很像最长上升子序列,自然而然想到用dp的思路去处理 题目中给的限制条件是,要接上前面的边,前面的边权一定要小于当前的边权(题目按照输入的顺序,因此只找前面的边) 对于每个结点,我们要维护的信息是: 当前状态下,w的边权到达这个点,最多能有几条边 如何维护这个信息呢?如果对每个点开一个maxn的数组,每次暴力修改,显然是过不去的 一种处理办法是:对每个点建动态线段树(可是本菜鸡不会!!..我马上去学 另一种简单的处理办法:用map以及map内置的函数 对…
题目传送门http://codeforces.com/contest/960/problem/F 4月25号期中考,答应过年级组长要考年排前3的,所以25号以前我就不搞竞赛了,期中考要考好. 有很多大佬写了主席树(初二的弱菜并不会).但初二的会树状数组和map呀哈哈哈哈. 做法很简单,开n个树状数组,对于每条边,我们维护走到它最多步数,也就是在它之前出现的边-1然后边权比它小的dp值的最大值+1 树状数组如果不用map会mle 上代码(dp数组就是wxy数组,至于为什么吗,看我另一篇博客就知道了…
题目链接:https://vjudge.net/problem/CodeForces-960F You are given a directed graph with n nodes and m edges, with all edges having a certain weight. There might be multiple edges and self loops, and the graph can also be disconnected. You need to choose…
You are given a directed graph with n nodes and m edges, with all edges having a certain weight. There might be multiple edges and self loops, and the graph can also be disconnected. You need to choose a path (possibly passing through same vertices m…
很不错的一道思维题. Code: #include<cstdio> #include<algorithm> #include<iostream> using namespace std; const int maxn = 1000000 + 4; const int inf = 100000 + 4; int n, m; int root[maxn], maxv[maxn << 2],ch[maxn << 2][2], cnt; inline v…