F. The Shortest Statement time limit per test:4 seconds memory limit per test:256 megabytes input:standard input output:standard output You are given a weighed undirected connected graph, consisting of \(n\) vertices and \(m\) edges. You should answe…
题目链接:codeforces 1051F The Shortest Statement 题意:\(q\)组询问,求任意两点之间的最短路,图满足\(m-n\leq 20\) 分析:一开始看这道题:floyd?简单 ​ 看下去:\(n\leq 10^5\),有点可怕 ​ 接下去:\(q\leq 10^5\),mmp 题目中十分重要的条件是\(m-n\leq 20\),我们要考虑如何利用好它使得能在\(O(logn)\)左右的时间内求出两点间最短路 由于\(m\)和\(n\)相差不大,我们很容易想到…
#include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <set> #include <vector> #include <stack> #include <queue> #include <algorithm> #include <cma…
原题传送门:CF1051F The Shortest Statement 题目大意,给你一个稀疏图,q次查询,查询两点之间距离 边数减点小于等于20 这不是弱智题吗,23forever dalao又开始虐题 作为蒟蒻的我只能在一旁出售烤绿鸟和main包,和大家一起吃西瓜 仔细想想,这题的确是很弱智 先随便找一个生成树,这样就能跑lca了 剩下的几条边的端点跑一下SPFA堆优化dij,用于特判,SPFA已经死了 查询先用lca算一下距离,再暴力枚举这40个端点到两点的距离值和(最多) 就这样完了,…
F - The Shortest Statement emmm, 比赛的时候没有想到如何利用非树边. 其实感觉很简单.. 对于一个询问答案分为两部分求: 第一部分:只经过树边,用倍增就能求出来啦. 第二部分:经过至少一条非树边, 如果经过一个树边那么必定经过其两个端点,暴力的求出这些端点为起始点的最短路. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make…
1051E. Vasya and Big Integers 题意 给出三个大整数\(a,l,r\),定义\(a\)的一种合法的拆分为把\(a\)表示成若干个字符串首位相连,且每个字符串的大小在\(l,r\)之间,求每个字符串不能有前导零,求\(a\)有多少种合法的拆分方案. 题解 不难想到\(dp\),设\(dp_i\)表示前\(i\)个数有多少种合法的拆分方案. \(dp_i=\sum_{j=1}^i dp_{j-1}\)(从\(j+1~i\)拆分的数在\(l,r\)之间) 直接转移是\(O(…
F. The Shortest Statement http://codeforces.com/contest/1051/problem/F 题意: n个点,m条边的无向图,每次询问两点之间的最短路.(m-n<=20) 分析: dijkstra. 如果是一棵树,那么可以直接通过,dis[u]+dis[v]-dis[lca]*2来求.现在如果建出一棵树,那么非树边只有小于等于21条. 只经过树边的路径用上面的方式求出,考虑经过非树边的路径. 经过非树边(至少一条),那么一定经过了这条边的顶点,所以…
题目链接:The Shortest Statement 今天又在群里看到一个同学问$n$个$n$条边,怎么查询两点直接最短路.看来这种题还挺常见的. 为什么最终答案要从42个点的最短路(到$x,y$)之和,还有$x,y$到$LCA(x,y)$的距离里面取呢? 就是如果走非树边,那么一定要走42个点中的一个,不走树边,就是LCA求了. 我写的太蠢了,还写生成树,看大家都是LCA中的dfs直接标记下就行了. 验证了算法的正确,我又试了试把每条非树边只加一个点,也是AC的,其实想了想,确实正确. #i…
You are given a weighed undirected connected graph, consisting of nn vertices and mm edges. You should answer qq queries, the ii-th query is to find the shortest distance between vertices uiui and vivi. Input The first line contains two integers n an…
问题描述 You are given a weighed undirected connected graph, consisting of n vertices and m edges. You should answer q queries, the i-th query is to find the shortest distance between vertices ui and vi. 输入格式 The first line contains two integers n and m…
题目 You are given a weighed undirected connected graph, consisting of n vertices and m edges. You should answer q queries, the i-th query is to find the shortest distance between vertices \(u_i\) and \(v_i\). 输入格式 The first line contains two integers…
题目描述 You are given a weighed undirected connected graph, consisting of n vertices and mm edges. You should answer q queries, the i-th query is to find the shortest distance between vertices ui and vi. Input The first line contains two integers n and…
题目链接 先随便建一棵树. 如果两个点(u,v)不经过非树边,它们的dis可以直接算. 如果两个点经过非树边呢?即它们一定要经过该边的两个端点,可以直接用这两个点到 u,v 的最短路更新答案. 所以枚举每条非树边的两个端点,求一遍这两个点到所有点的最短路.非树边最多21条,所以要求一遍最短路的点最多42个. 另外对于一条边的两个点只求一个就好了.因为要用这条非树边的话它们两个都要经过. //779ms 28900KB #include <queue> #include <cstdio&g…
https://codeforces.com/contest/1051/problem/F 题意 给一个带权联通无向图,n个点,m条边,q个询问,询问两点之间的最短路 其中 m-n<=20,1<=n,m<=1e5 思路 因为图一定联通,所以n-1<=m<=n+20 因为是求任意两点的最短路,所以直接暴力跑最短路是不行的,考虑选择性的跑最短路 因为是求两点之间的距离,所以可以往lca方面想 先跑一棵生成树出来,然后处理出每个点的lca,这样就可以求出任意两点的距离 然后就可以记…
传送门 这真是一道一言难尽的题. 首先比赛的时候居然没想出来正解. 其次赛后调试一直调不出来最后发现是depth传错了. 其实这是一道简单题啊. 对于树边直接lca求距离. 由于非树边最多21条. 因此我们对这21条边连接的42个点都跑一次最短路来更新答案的最小值即可. 代码: #include<bits/stdc++.h> #define N 100005 #define ll long long #define pii pair<int,int> #define pli pai…
题目大意:给定一张$n$个点$m$条有权边的无向联通图,$q$次询问两点间的最短路 $n\le100000$,$m\le100000$,$1\le100000$,$m$-$n\le20$. 首先看到$m$-$n\le20$这条限制,我们可以想到是围绕这个20来做这道题. 即如果我们随便在图上找一棵树,有最多21条非树边,连接最多42个顶点 考虑两点$x,y$之间的最短路就是某个点到$x$和$y$的最短路之和 首先对于只走树边的情况,这个点是两点的$LCA$ 如果经过非树边,$x$或$y$到枚举的…
题目:给定一张n个点m条有权边的无向联通图,q次询问两点间的最短路 n≤100000,m≤100000,m-n≤20. 首先看到m-n≤20这条限制,我们可以想到是围绕这个20来做这道题. 即如果我们随便在图上找一棵树,有最多21条非树边,连接最多42个顶点 考虑两点x,yx,y之间的最短路就是某个点到xx和yy的最短路之和 首先对于只走树边的情况,这个点是两点的LCA 如果经过非树边,xx或yy到枚举的这个点的最短路上的最后一条边一定是非树边(如果都是树边的话完全可以转化到一个连接着非树边的点…
题意 题目链接 题意:给出一张无向图,每次询问两点之间的最短路,满足$m - n <= 20$ $n, m, q \leqslant 10^5$ Sol 非常好的一道题. 首先建出一个dfs树. 因为边数-点数非常少,所以我们可以对于某些非树边特殊考虑. 具体做法是:对于非树边连接的两个点,暴力求出它们到所有点的最短路 对于询问的$(x, y)$ 用树上的边,以及非树边连接的点到他们的最短路之和更新答案 由于边数的限制,非树边连接的点不会超过$2*(m - (n - 1)) = 42$个 #in…
[链接] 我是链接,点我呀:) [题意] [题解] 先处理出来任意一棵树. 然后把不是树上的边处理出来 对于每一条非树边的点(最多21*2个点) 在原图上,做dijkstra 这样就能处理出来这些非树边上的点到其他任意点的最短路了. 然后对于询问x,y 先用LCA+预处理,求出树上的最短路. 接下来考虑有非树边的情况. 显然只要枚举它经过了非树边上的点z 那么用dis[z][x]+dis[z][y]尝试更新ans就好. 只要枚举非树边上的点. 这是突破口. [代码] #include <bits…
这道题思路比较有意思,第一次做完全没想到点子上... 看到题目第一反应是一道最短路裸题,但是数据范围1e5说明完全不可能. 这个时候可以观察到题目给出了一个很有意思的条件,就是说边最多比点多20. 这有什么用呢? 那么我们大胆猜想,可否将整个图划分为21条边(连接最多42个点)和一颗树?(极限情况) 如果这样的话,对于任意的两个节点uv,它们之间的最短路只有两种情况: 这两个点都在树上.所以说最短路必然是u->lca(u,v)->v. 不是上面那种情况.这个时候肯定会有连到外面那21个边.我们…
题目链接: https://codeforces.com/contest/1051/problem/F 题目大意: 给出一张$n$个点,$m$条边的带权无向图,多次询问,每次给出$u,v$,要求输出$u$到$v$的最短距离 $1<=n<=m<=10^5,m-n<=20$ 题解: 显然我们要从$m-n<=20$入手,发现这张图非常的稀疏,所以按照套路我们先随便搞一棵生成树(和kruskal的步骤差不多只是去掉了排序). 当询问两个点$u,v$的最短距离时我们先只考虑树上的点,显…
题目链接 传送门 题面 题意 给你一张有\(n\)个点\(m\)条边的联通图(其中\(m\leq n+20)\),\(q\)次查询,每次询问\(u\)与\(v\)之间的最短路. 思路 由于边数最多只比点数大21,因此我们可以先跑出一棵最小生成树,然后将非树上边的两个端点跑一边最短路,然后每次查询就比较\(max((dis[u]+dis[v]-2dis[lca(u,v)]),dist[i][u]+dis[i][v])\),其中\(dis[u]\)表示\(u\)到最小生成树根节点的距离,\(dist…
动态询问连通图任意两点间最短路,单次询问. 显然,肯定有一些巧妙地性质(不然你就发明了新的最短路算法了233)有一点很奇怪:边数最多只比点数多 $20$ 个,那么就可以将这个图看作是一个生成树,上面连了不到 $20$ 条边. 考虑两个点之间地最短路只有两种情况:经过所有只在生成树上的点,或者经过一些连着生成树外的点. 第一个情况非常好求,随便搞一个生成树然后求个距离就行. 对于第二种情况,由于连着生成树外的边的点最多只有 $20$ 个,所以可以对这些点都跑一遍最短路,然后依次枚举即可. 每次询问…
传送门 Luogu 解题思路 注意到 \(m - n \le 20\) ,所以这其实是一个树上问题,非树边至多只有21条,那么我们就可以暴力地对每一个非树边所连接的点求一次单源最短路,然后每次询问时,先访问两点的树上距离,再尝试用非树边更新答案,取最小值输出即可. 细节注意事项 最短路不要写挂就好 参考代码 #include <algorithm> #include <iostream> #include <cstring> #include <cstdlib&g…
题目链接 分析: 还是很明白的题意,直接分析问题,首先,这一题真的是给spfa用武之地,m比n大不超过20,但是这并不能使暴力不t,我们考虑一下如何改进一下,我们这样想,这个图只比它的生成树多最多21条边,而树上的最短路有是那么的容易(lca),我们可以先求出在树上两个点之间的最短路,可是非树边也很有可能通过啊,怎么办呢?我们可以这样想,通过至少一个非树边与只通过树边是对立的,也就是说除了只通过非树边的都通过树边,而只通过树边的很好求,下面我们来思考如何求通过至少一个非树边的路径. 如果通过至少…
The Shortest Statement 题目链接:https://codeforces.com/contest/1051/problem/F 数据范围:略. 题解: 关于这个题,有一个重要的性质:$m - n \ge 20$. 这个性质乍一看没啥思路.....想到最短路树也很容易,不就是多了$20$条非树边么,有啥的. 看了题解.... 哇哦~多了$20$条非树边,也就是多了$40$可能经过非树边的点. 我们把两点的路径分为两种,最短路一定在这两种路径中. 第一种是两个点在最短路树上的路径…
蒟蒻就切了四道水题,然后EF看着可写然而并不会,中间还WA了一次,我太菜了.jpg =.= A.Vasya And Password 一开始看着有点虚没敢立刻写,后来写完第二题发现可以暴力讨论,因为保证有解,没了 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; char rd[N]; int main () { int T; scanf("%d"…
做了四个题.. A. Vasya And Password 直接特判即可,,为啥泥萌都说难写,,,, 这个子串实际上是忽悠人的,因为每次改一个字符就可以 我靠我居然被hack了???? %……&*()(*&……好吧我把$0$从数字里扔了. /* */ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<map> #in…
A:Vasya And Password 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt","r",stdin); freopen("_out.txt","w",stdout); #define LL long long #define ULL unsigned LL #define fi first #…
We all love short and direct problems, it is easier to write, read and understand the problem statement.Here is one of these problems. \Life is too short to make a story", said Ahmed Aly.You are given a weighted directed graph of N nodes (the nodes a…