题目:给定一张n个点m条有权边的无向联通图,q次询问两点间的最短路 n≤100000,m≤100000,m-n≤20. 首先看到m-n≤20这条限制,我们可以想到是围绕这个20来做这道题. 即如果我们随便在图上找一棵树,有最多21条非树边,连接最多42个顶点 考虑两点x,yx,y之间的最短路就是某个点到xx和yy的最短路之和 首先对于只走树边的情况,这个点是两点的LCA 如果经过非树边,xx或yy到枚举的这个点的最短路上的最后一条边一定是非树边(如果都是树边的话完全可以转化到一个连接着非树边的点…
题目大意:给定一张$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$到枚举的…
题意 题目链接 题意:给出一张无向图,每次询问两点之间的最短路,满足$m - n <= 20$ $n, m, q \leqslant 10^5$ Sol 非常好的一道题. 首先建出一个dfs树. 因为边数-点数非常少,所以我们可以对于某些非树边特殊考虑. 具体做法是:对于非树边连接的两个点,暴力求出它们到所有点的最短路 对于询问的$(x, y)$ 用树上的边,以及非树边连接的点到他们的最短路之和更新答案 由于边数的限制,非树边连接的点不会超过$2*(m - (n - 1)) = 42$个 #in…
原题传送门:CF1051F The Shortest Statement 题目大意,给你一个稀疏图,q次查询,查询两点之间距离 边数减点小于等于20 这不是弱智题吗,23forever dalao又开始虐题 作为蒟蒻的我只能在一旁出售烤绿鸟和main包,和大家一起吃西瓜 仔细想想,这题的确是很弱智 先随便找一个生成树,这样就能跑lca了 剩下的几条边的端点跑一下SPFA堆优化dij,用于特判,SPFA已经死了 查询先用lca算一下距离,再暴力枚举这40个端点到两点的距离值和(最多) 就这样完了,…
需求是只需要得到两点间的最短路,不需要求得单源对于全图的最短路,使用boost中的dijsktra_shortest_path,当得到目标点的最短路时直接throw exception. #include <boost/config.hpp> #include <iostream> #include <boost/graph/graph_traits.hpp> #include <boost/graph/adjacency_list.hpp> #includ…
需求是只需要得到两点间的最短路,不需要求得单源对于全图的最短路,使用boost中的dijsktra_shortest_path,当得到目标点的最短路时直接throw exception. #include <boost/config.hpp> #include <iostream> #include <boost/graph/graph_traits.hpp> #include <boost/graph/adjacency_list.hpp> #includ…
动态询问连通图任意两点间最短路,单次询问. 显然,肯定有一些巧妙地性质(不然你就发明了新的最短路算法了233)有一点很奇怪:边数最多只比点数多 $20$ 个,那么就可以将这个图看作是一个生成树,上面连了不到 $20$ 条边. 考虑两个点之间地最短路只有两种情况:经过所有只在生成树上的点,或者经过一些连着生成树外的点. 第一个情况非常好求,随便搞一个生成树然后求个距离就行. 对于第二种情况,由于连着生成树外的边的点最多只有 $20$ 个,所以可以对这些点都跑一遍最短路,然后依次枚举即可. 每次询问…
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 \(u_i\) and \(v_i\). 输入格式 The first line contains two integers…
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=78207 看懂题就好. 求某一办公室到其他办公室的最短距离. 多组输入,n表示n条关系,下面n次每次输入 x y d表示x到y的距离是d. 输出办公室的编号和距离. 因为 顶点数小于10,直接floyed求出所有距离之后,枚举出最短距离即可. /* *********************************************** Author : zch Cre…
https://codeforces.com/contest/1051/problem/F 题意 给一个带权联通无向图,n个点,m条边,q个询问,询问两点之间的最短路 其中 m-n<=20,1<=n,m<=1e5 思路 因为图一定联通,所以n-1<=m<=n+20 因为是求任意两点的最短路,所以直接暴力跑最短路是不行的,考虑选择性的跑最短路 因为是求两点之间的距离,所以可以往lca方面想 先跑一棵生成树出来,然后处理出每个点的lca,这样就可以求出任意两点的距离 然后就可以记…
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…
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条. 只经过树边的路径用上面的方式求出,考虑经过非树边的路径. 经过非树边(至少一条),那么一定经过了这条边的顶点,所以…
题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_C All Pairs Shortest Path Input An edge-weighted graph G (V, E). |V| |E| s0 t0 d0 s1 t1 d1 : s|E|−1 t|E|−1 d|E|−1 |V| is the number of vertices and |E| is the number of edges in G. T…
Senior Pan Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1462    Accepted Submission(s): 573 Problem Description Senior Pan fails in his discrete math exam again. So he asks Master ZKC to g…
F - The Shortest Statement emmm, 比赛的时候没有想到如何利用非树边. 其实感觉很简单.. 对于一个询问答案分为两部分求: 第一部分:只经过树边,用倍增就能求出来啦. 第二部分:经过至少一条非树边, 如果经过一个树边那么必定经过其两个端点,暴力的求出这些端点为起始点的最短路. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make…
题目链接 传送门 题面 题意 给你一张有\(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…
The Shortest Statement 题目链接:https://codeforces.com/contest/1051/problem/F 数据范围:略. 题解: 关于这个题,有一个重要的性质:$m - n \ge 20$. 这个性质乍一看没啥思路.....想到最短路树也很容易,不就是多了$20$条非树边么,有啥的. 看了题解.... 哇哦~多了$20$条非树边,也就是多了$40$可能经过非树边的点. 我们把两点的路径分为两种,最短路一定在这两种路径中. 第一种是两个点在最短路树上的路径…
问题描述 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 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…
传送门 这真是一道一言难尽的题. 首先比赛的时候居然没想出来正解. 其次赛后调试一直调不出来最后发现是depth传错了. 其实这是一道简单题啊. 对于树边直接lca求距离. 由于非树边最多21条. 因此我们对这21条边连接的42个点都跑一次最短路来更新答案的最小值即可. 代码: #include<bits/stdc++.h> #define N 100005 #define ll long long #define pii pair<int,int> #define pli pai…
题目链接: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\)相差不大,我们很容易想到…
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(…
题目链接:The Shortest Statement 今天又在群里看到一个同学问$n$个$n$条边,怎么查询两点直接最短路.看来这种题还挺常见的. 为什么最终答案要从42个点的最短路(到$x,y$)之和,还有$x,y$到$LCA(x,y)$的距离里面取呢? 就是如果走非树边,那么一定要走42个点中的一个,不走树边,就是LCA求了. 我写的太蠢了,还写生成树,看大家都是LCA中的dfs直接标记下就行了. 验证了算法的正确,我又试了试把每条非树边只加一个点,也是AC的,其实想了想,确实正确. #i…
#include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <set> #include <vector> #include <stack> #include <queue> #include <algorithm> #include <cma…
find the longest of the shortest Time Limit: 1000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2524    Accepted Submission(s): 888 Problem Description Marica is very angry with Mirko because he found a new gi…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2125 因为看了TJ又抄了标程,现在感觉还是轻飘飘的……必须再做一遍. 两点间的情况: 1.直到 lca 都没有在一个环上的部分: 2.本来就处在一个环上: 3.本来不在一个环上,快到 lca 的时候开始处在一个环上了. 第一种情况就普通弄就行.处理倍增 lca 数组和根到每个点的最短路dis值. 第二种情况在环上两部分取较短的就行. 第三种情况是前两种的结合.需要找到 p 和 q 刚开始在…
F.Moving On Firdaws and Fatinah are living in a country with nn cities, numbered from 11 to nn. Each city has a risk of kidnapping or robbery. Firdaws's home locates in the city uu, and Fatinah's home locates in the city vv. Now you are asked to find…
权声明:本文为博主原创文章,未经博主允许不得转载. 利用百度API(JavaScript 版)实现在地图上绘制任一多边形,并判断给定经纬度是否在多边形范围内.以及两点间的测距功能. 绘制多边形(蓝色),折线轨迹(红色)效果图: <img src="http://img.blog.csdn.net/20150915193750707?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3626 题意: 给出一个n个节点的有根树(编号为0到n-1,根节点为0,n <= 50000). 一个点的深度定义为这个节点到根的距离+1. 设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先. 有q次询问,每次询问给出l,r,z,求∑ dep[LCA(i,z)] (l<=i<=r). (即,求在[l,r]区间内的每个节点i与z的最近公共祖先的深度之和) 题解:…