LA 4080 战争和物流(最短路树)】的更多相关文章

https://vjudge.net/problem/UVALive-4080 题意:给出一个n个结点m条边的无向图,每条边上有一个正权.令c等于每对结点的最短路长度之和.不连通的两点的最短路长度视为L. 求出初始时的最短路长度之和以及删除一条边后最大的最短路长度之和. 思路: 最短路树其实很简单,就是用一个二维数组记录某个源点出发所经过的边,如$belong[s][i]$就说明源点s出发经过了i这条边.这样做的好处是当我们枚举删除的边的时候,如果它不在当前源点的最短路树上,那么对于最短路不会有…
题意: 给一个无向图,n个点,m条边,可不连通,可重边,可多余边.两个问题,第一问:求任意点对之间最短距离之和.第二问:必须删除一条边,再求第一问,使得结果变得更大. 思路: 其实都是在求最短路的过程. 第一问可以floyd解决,也可以SSSP解决.注意是任意两个点,(a,b)和(b,a)是不同的,都要算. 第二问要穷举删除每条边,再求第一问.为了降低复杂度,假设用dijkstra求最短路,那么可以利用第一问中所生成的树,共n棵,每棵至多n-1条边,如果穷举的边不在该某树上,那么该树的所有路径长…
layout: post title: 训练指南 UVALive - 4080(最短路Dijkstra + 边修改 + 最短路树) author: "luowentaoaa" catalog: true mathjax: true tags: - Dijkstra - 最短路树 - 图论 - 训练指南 Warfare And Logistics UVALive - 4080 题意 ①先求任意两点间的最短路径累加和,其中不连通的边权为L ②删除任意一条边,求全局最短路径和的最大值 题解…
很多的边会被删掉,需要排除一些干扰进行优化. 和UVA - 1279 Asteroid Rangers类似,本题最关键的地方在于,对于一个单源的最短路径来说,如果最短路树上的边没有改变的话,那么最短路肯定是不会变的, 所以只要枚举删掉最短路树上的边.这样的时间复杂度就能过了. #include<bits/stdc++.h> using namespace std; , maxm = ; int head[maxn], to[maxm], nxt[maxm],wei[maxm],ecnt; in…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3409 参考博客:http://www.cnblogs.com/woaishizhan/p/3189813.html #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<queue> #inclu…
题目大意: 求图中两两点对最短距离之和 允许你删除一条边,让你最大化删除这个边之后的图中两两点对最短距离之和. 暴力:每次枚举删除哪条边,以每个点为源点做一次最短路,复杂度\(O(NM^2logN)\). 值得注意的是,\(Dijkstra\)的复杂度\(O(NlogN)\)是关于边而非点的. 这个复杂度对于\(n=100,m=1000\)的数据难以接受.我们考虑对每个点建出其最短路树.容易想到,只有删除到这个点的最短路树上的边时,才需要再做一次\(Dijkstra\).也就是说每个源点只需要做…
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与元素之间可以互相转换:能量守恒……. 能量守恒……iPig 今天就在进行一个麻烦的测验.iPig 在之前的学习中已经知道了很多种元素,并学会了可以转化这些元素的魔法,每种魔法需要消耗 iPig 一定的能量.作为 PKU 的顶尖学猪,让 iPig 用最少的能量完成从一种元素转换到另一种元素……等等,i…
题目描述 给出一个N*M的网格图,有一些方格里面存在城市,其中首都位于网格图的左上角.你可以沿着网络的边界走,要求你走的路线是一个环并且所有城市都要被你走出来的环圈起来,即想从方格图的外面走到任意一个城市一定要和你走的路线相交.你沿着方格的边界走是需要费用的,不同的边界费用可能不同,求最小代价. 1<=N,M<=400,走过边界的代价为正整数且不超过10^9 输入 输出 样例输入 Input 1 3 3 1 0 0 1 0 0 0 0 1 1 4 9 4 1 6 6 6 1 2 2 9 1 1…
题目链接:路径和树 题意:给定无向带权连通图,求从u开始边权和最小的最短路树,输出最小边权和. 题解:构造出最短路树,把存留下来的边权全部加起来.(跑dijkstra的时候松弛加上$ < $变成$ <= $,因为之后跑到该顶点说明是传递下来的,该情况边权和最小.) 以样例作说明:第一次从顶点3跑到顶点1,最短路为2:第二次从顶点3经过顶点2跑到顶点1,最短路也为2,但是第二次跑的方式可以把从顶点3跑到顶点2的包括进去,这样形成的最短路树边权和最小. #include <queue>…
最短路树就是用bfs走一遍就可以了 d[v] = d[u] + 1 表示v是u的前驱边 然后遍历每个结点 存下它的前驱边 再用dfs遍历每个结点 依次取每个结点的某个前驱边即可 #include <bits/stdc++.h> #define mem(a, b) memset(a, b, sizeof(a)) using namespace std; , INF = 0x7fffffff; int n, m, k, cnt; int head[maxn], d[maxn]; vector<…
题意: 给出n个点m条边的图,c次询问 求询问中两个点间的最短距离. 解析: Floyd会T,所以用到了最短路树..具体思想为: 设k为u和v的最近公共祖先 d[i] 为祖结点到i的最短距离  则dis[u][v] = d[u] + d[v] - 2*d[k] 用tarjan的lca求即可 把这题代码当作模板就好啦 #include <iostream> #include <cstdio> #include <sstream> #include <cstring&…
1880: [Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间,他们 希望在节约时间的前提下,一起走的时间尽可能的长. 现在已知的是Elaxia和w**所在的宿舍和实验室的编号以及学校的地图:地图上有N个路 口,M条路,经过每条路都需要一定的时间. 具体地说,就是要求无向图中,两对点间最短路的最长公共路径. I…
\(\color{#0066ff}{ 题目描述 }\) \(\color{#0066ff}{输入格式}\) \(\color{#0066ff}{输出格式}\) \(\color{#0066ff}{输入样例}\) 6 7 1 2 1 2 3 1 3 4 2 4 5 1 5 6 1 1 3 3 4 6 3 1 6 4 1 2 1 3 4 3 6 5 \(\color{#0066ff}{输出样例}\) 7 6 Infinity 7 \(\color{#0066ff}{数据范围与提示}\) \(\col…
最短路树...开眼界了...之前想也没想过.... 先跑出来1到每个点最短路,然后建树时要标记点的入度,否则会多连边...然后深搜时更新新答案就是 #include<cstdio> #include<iostream> #include<cstring> #include<queue> #define R register int #define mp make_pair ,M=; using namespace std; inline int g() {…
题目大意:给你一个边权为$1$的无向图,构造出所有$1$为根的最短路树并输出 性质:单源最短路树上每个点到根的路径 ,一定是这个点到根的最短路之一 边权为$1$,$bfs$出单源最短路,然后构建最短路树即可 代码实现需要思考 可以用$vector$记录最短路树中,每个点可能的父亲,对于合法父亲数量$>1$的点,$dfs$出所有可能的方案 #include <queue> #include <vector> #include <cstdio> #include &l…
问题描述 LG-CF1005F 题解 由题面显然可得,所求即最短路树. 所以跑出最短路树,计数,输出方案即可. \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; template <typename Tp> void read(Tp &x){ x=0;char ch=1;int fh; while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar…
\(\mathrm{Shortcut}\) 问题描述 LG5201 题解 最短路树. 显然奶牛的路径就是从\(1\)走到各个草地,于是从\(1\)跑最短路,构建最短路树. 为了保证字典序,从\(1\)到\(n\)依次枚举每个结点,构建. 显然,用贪心的思想,这条边一定是从某个结点\(x\)联向\(1\)的. 然后深度遍历这棵最短路树,在每个结点处处理答案即可. 注意需要long long \(\mathrm{Code}\) #include<bits/stdc++.h> using names…
问题描述 Codeforces 洛谷(有翻译) 题解 最短路树,是一棵在最短路过程中构建的树. 在\(\mathrm{Dijkstra}\)过程中,如果最终点\(y\)是由点\(x\)转移得到的,则在最短路树上\(x\)是\(y\)的父节点,\(x\)到\(y\)的最短路树上长度等于原图上转移\(x,y\)的边的长度. 显然每一条边最多能贡献\(1\)的答案. 在最短路树上选取边,能保证每一条边都贡献答案. 选取的边连接的点和根结点\(1\)要是联通块. \(\mathrm{Code}\) #i…
Berland and the Shortest Paths 题目链接:https://www.codeforces.com/contest/1005/problem/F 数据范围:略. 题解: 太鬼畜了...... 就是问有多少颗不同的最短路树. 因为边权是$1$. 然后啊....只需要把可能的非树边枚举枚举,$dfs$一下就行了.... 我以为是啥魔鬼神仙题. 代码:(CF崩了代码丢了)…
The Shortest Statement 题目链接:https://codeforces.com/contest/1051/problem/F 数据范围:略. 题解: 关于这个题,有一个重要的性质:$m - n \ge 20$. 这个性质乍一看没啥思路.....想到最短路树也很容易,不就是多了$20$条非树边么,有啥的. 看了题解.... 哇哦~多了$20$条非树边,也就是多了$40$可能经过非树边的点. 我们把两点的路径分为两种,最短路一定在这两种路径中. 第一种是两个点在最短路树上的路径…
[Codeforces 1005F]Berland and the Shortest Paths(最短路树+dfs) 题面 题意:给你一个无向图,1为起点,求生成树让起点到其他个点的距离最小,距离最小的生成树可能有多个.给定k,如果方案数比k小就输出全部方案,否则输出k种方案. 分析 先跑最短路,对于每个点找到它在最短路树上可能的父亲.即对于\((x,y) \in E,dist(y)=dist(x)+len(x,y)\).那么y在最短路上可能的父亲就是x.说"可能"是因为最短路树可能不…
正题 题目链接:https://loj.ac/p/2769 题目大意 给出\(n\)个点\(m\)条地铁线路,每条线路是一条路径. 求\(1\)到\(n\)的最短路且在最短路径的情况下相邻换乘点的距离平方和最大. \(1\leq n,m,\sum s_i\leq 10^6\) 解题思路 首先肯定是在最短路树上跑,然后考虑怎么求平方和最大. 因为每条可以计算和的路径一定是连续的一段,所以考虑将一条铁路线去掉不在最短路树上的边后分出若干段来. 对于每一段上的转移都是一个\(f_{x}=max\{f_…
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=32266 题目大意:①先求任意两点间的最短路径累加和,其中不连通的边权为L   ②删除任意一条边,求全局最短路径和的最大值. 解题思路: 首先说下多源最短路中,floyd和和优先队列优化的dijkstra的取舍.floyd比较好拍,dijkstra具有常数有势,以及灵活性(如求第二问的时候). 本题最烦人的是枚举删除一条边,按照正常思维,要重新做n次dijkstra…
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=159&page=show_problem&problem=958 题意:n个星球,用最短的时间把k个超级计算机从s运到t: 其中,每个隧道是双向的,一个隧道里面只能有一个飞船在使用,一个飞船上只有一台计算机. 分析: 一个隧道只能给一个飞船用,那么假设需要t天,那么可以这样建图: u结点,拆成…
FDNY to the Rescue! Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2368   Accepted: 721 Description The Fire Department of New York (FDNY) has always been proud of their response time to fires in New York City, but they want to make the…
题目链接:Edge Deletion 题意:给定一张n个顶点,m条边的带权无向图,已知从顶点1到各个顶点的最短路径为di,现要求保留最多k条边,使得从顶点1到各个顶点的最短距离为di的顶点最多.输出m条边中需要保留的边的编号. 题解:先跑一遍最短路,在松弛操作时,存父子关系和边,在以这些关系建立新图(树),因为在松弛操作时存的关系,所以能保证是最短路径,最后DFS输出k条边即可. #include <queue> #include <cstdio> #include <cst…
题目链接:http://codeforces.com/contest/1076/problem/D 题目大意: 一个图N个点M条双向边.设各点到点1的距离为di,保证满足条件删除M-K条边之后使得到点1的距离仍为di的点数量最多的情况下,输出剩余的K条边的编号(按输入顺序).  (2≤n≤3⋅105, 1≤m≤3⋅105, n−1≤m, 0≤k≤m) 解题思路:太菜了没写出来... 参考自博客:https://www.cnblogs.com/Lubixiaosi-Zhaocao/p/995171…
传送门 强行二合一最为致命 第一问直接最短路+$DFS$解决 考虑第二问,与深度相关,可以考虑长链剖分. 设$f_{i,j}$表示长度为$i$,经过边数为$j$时的最大边权和,考虑到每一次从重儿子转移过来的时候,不仅要将$f$数组右移一格,还需要同时加上一个值.显然用线段树等数据结构额外维护是不现实的,我们考虑维护一个影响范围为整个$f_i$的加法标记$tag_i$,将$f_{i,0}$设置为$-tag_i$,每一次上传的时候把标记也一起上传,合并轻儿子.计算答案的时候将这个$tag$加上,就能…
OI游戏 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 196  Solved: 159[Submit][Status][Discuss] Description 小Van的CP最喜欢玩与OI有关的游戏啦~小Van为了讨好她,于是冥思苦想,终于创造了一个新游戏. 下面是小Van的OI游戏规则: 给定一个无向连通图,有N个节点,编号为0~N-1.图里的每一条边都有一个正整数权值,边权在1~9之间. 要求从图里删掉某些边(有可能0条),使得剩下的图满足以…
 One day, Tom traveled to a country named BGM. BGM is a small country, but there are N (N <= 100) towns in it. Each town products one kind of food, the food will be transported to all the towns. In addition, the trucks will always take the shortest w…