洛谷
子夜ザ
这个作者很懒,什么都没留下…
展开
-
逛公园(洛谷P3953)
终于做出来了。。。。。。题目一位大佬的博客然后按我的个人理解来说说思路吧。首先建图,要建正向图和反向图。正向跑spfa,算出每个点到起点的最短距离,然后因为有的点可能没法在给定的条件下跑到终点,所以如果正向bfs会多做无用功,所以我们要反向bfs,从终点开始bfs。然后就是松弛,因为你可以最多多走k个单位的冤枉路,所以对每条边,都要试一试,看看能不能多走冤枉路,多走的距离就是d[v]+u,v之间的距离(也就是e.dist)-d[u]然后剩下的就是l-(d[v]+e.dist-d[u])dfs(原创 2022-04-22 17:09:46 · 151 阅读 · 0 评论 -
引水入城 洛谷P1514
题目一个大佬的博客代码#include<bits/stdc++.h>using namespace std;const int maxn=1e3+5;const int inf=0x3f3f3f3f;typedef long long ll;typedef pair<int,int> PII;bool vis[maxn][maxn];int a[maxn][maxn];int l[maxn],r[maxn];int n,m;int dx[4]={0,0,-1转载 2022-04-21 14:38:23 · 51 阅读 · 0 评论 -
洛谷P2515 软件安装(Tarjan+树上dp)
题目一篇通俗易懂的题解代码#include<bits/stdc++.h>using namespace std;const int maxn=1e6+5;const int inf=0x3f3f3f3f;typedef long long ll;struct Edge{ int from,to;};int n,m;vector<Edge>edges;vector<int>G[maxn];void add(int from,int to)转载 2022-03-24 15:03:05 · 102 阅读 · 0 评论 -
洛谷P3225 [HNOI2012]矿场搭建(割点+组合数学)
题目一篇简单易懂的题解代码#include<bits/stdc++.h>using namespace std;const int maxn=2e3+5;const int inf=0x3f3f3f3f;typedef long long ll;struct Edge{ int from,to;};vector<Edge>edges;vector<int>G[maxn];void add(int from,int to){ ed转载 2022-03-23 14:58:35 · 116 阅读 · 0 评论 -
洛谷p2294(前缀和+差分约束)
题目代码如下:#include<bits/stdc++.h>using namespace std;const int maxn=1e6+5;const int inf=0x3f3f3f3f;typedef long long ll;int n,m;struct Edge{ int from,to,dist;};vector<Edge>edges;vector<int>G[maxn];void init(){ for(int原创 2022-02-07 22:47:05 · 75 阅读 · 0 评论 -
洛谷P5960 差分约束算法
题目一个差分约束系统是这样的:给出 n 个变量和 m 个约束条件,形如xi-xj<=ck,你需要求出一组解,使得所有约束条件均被满足。怎么样解这个差分约束系统呢?我们将上面的不等式变形一下:xi<=xj+ck容易发现这个形式和最短路中的三角形不等式dis v<=dis u+w非常相似。因此我们就将这个问题转化为一个求最短路的问题:比如对于上面这个不等式,我们从j向i连一条权值为ck 的边接下来,我们再新建一个 0 号点,从 0 号点向其他所有点连一条权值为 0 的边。这个操转载 2022-02-06 15:13:07 · 146 阅读 · 0 评论 -
堆优化的prime算法
Prim和Dijkstra的贪心思想是一样的并且也可以用类似的方法实现代码如下#include<bits/stdc++.h>using namespace std;const int maxn=1e6+5;const int inf=0x3f3f3f3f;typedef long long ll;struct Edge{ int from,to,dist;};int n,m;vector<Edge>edges;vector<int>G[ma原创 2022-02-04 11:15:20 · 1048 阅读 · 0 评论 -
洛谷P1967 [NOIP2013 提高组] 货车运输(最大生成树+LCA)
题目思路由题可知,我们要求的是最大载重,而且这个最大载重要适用于每条边,所以毫无疑问这是个求最小的最大问题。这时候我们应该构建最大生成树。得到了这样一个树之后,我们便考虑如何求出两个节点之间最小边权的最大值(即为题中的最大载重),因为这两点之间的路径是唯一的,我们只需要找出这条路径便可以得到答案,a,b两点有且只有一条路径连通,我们可以通过LCA将a,b两点连的路都走一遍,并且每经过每条路都对限重进行比较,以保证求得最大限重。代码如下#include<bits/stdc++.h>usi原创 2022-02-03 23:33:13 · 471 阅读 · 0 评论 -
洛谷P2195 HXY造公园
题目题意给出一个n个点,m条边组成的森林,有q组询问:1.给出点x,求点x所在的树的直径2.给出点x,y,要求将x,y所在的树之间连一条边并构成一棵新的树,满足这个新的树的直径最小思路1.求树的直径,并存在一个数组里2.用并查集来动态合并+维护区域信息(包括同一颗树里的有着相同祖先的点的合并,不同树之间的合并)3.假设length数组:对于每棵树的根节点x,length[x]=该树的直径长度接下来对于每个询问2(如果给出的两点在同一颗树内则忽略),利用并查集找出两棵树的根节点x,y,并用并原创 2022-01-16 20:30:49 · 230 阅读 · 0 评论 -
洛谷 P2921 [USACO08DEC]Trick or Treat on the Farm G
题目转载(https://www.luogu.com.cn/blog/yjpiaomiao/P2921)转载 2021-11-23 09:42:45 · 123 阅读 · 2 评论