题目链接:https://vjudge.net/problem/UVA-1416

题解:

  这是一个最短路的好题,首先我们考虑如果暴力弗洛伊德,显然时间复杂度不对,如果做n次spfa好像复杂度也不对,所以考虑优化这个暴力。

  我们考虑对于一个单源最短路,只有改变了最短路树中的某条边,才需要重新做一次最短路。所以我们不需要对于每条边都重新做最短路,只需要对于在最短路数上的边做,所以时间复杂度就优化成了你】

mn^2log(n)。

  实现的时候要用pre数组记下,以i为终点的最短路树的边,实现有点复杂,看一下代码吧。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#include <queue>
#define MAXN 10000
#define ll long long
using namespace std;
struct edge{
int first,next,to,quan,id;
}a[MAXN*];
struct heapnode{
int id,x;
bool operator < (const heapnode &h)const{
return h.x<x;
}
};
priority_queue<heapnode> q;
int dis[MAXN],have[MAXN],hh[MAXN],pre[MAXN],n,m,l,inf,num=;
ll t[MAXN]; void addedge(int from,int to,int quan,int id){
a[++num].to=to;
a[num].id=id;
a[num].quan=quan;
a[num].next=a[from].first;
a[from].first=num;
} ll dij(int s,int cant){
memset(dis,,sizeof(dis));inf=dis[];
memset(have,,sizeof(have));
memset(pre,,sizeof(pre));
while(!q.empty()) q.pop();
dis[s]=;q.push((heapnode){s,});
while(!q.empty()){
int now=q.top().id;
q.pop();
if(have[now]) continue;
have[now]=;
for(int i=a[now].first;i;i=a[i].next){
int to=a[i].to,quan=a[i].quan,id=a[i].id;
if(id==cant) continue;
if(dis[to]>dis[now]+quan){
pre[to]=id;
dis[to]=dis[now]+quan;
q.push((heapnode){to,dis[to]});
}
}
}
ll ret=;
for(int i=;i<=n;i++){
if(dis[i]==inf) ret+=l;
else ret+=dis[i];
}
return ret;
} void sovle(int s){
int c=dij(s,);
for(int i=;i<=n;i++) hh[i]=pre[i];
for(int i=;i<=m;i++) t[i]+=c;
for(int i=;i<=n;i++) if(hh[i]) t[hh[i]]+=dij(s,hh[i])-c;
} int main()
{
while(scanf("%d%d%d",&n,&m,&l)!=EOF){
memset(a,,sizeof(a));
memset(t,,sizeof(t));
num=;
for(int i=;i<=m;i++){
int x,y,z;scanf("%d%d%d",&x,&y,&z);
addedge(x,y,z,i),addedge(y,x,z,i);
}
for(int i=;i<=n;i++) sovle(i);
ll ans=;
for(int i=;i<=m;i++) ans=max(ans,t[i]);
printf("%lld %lld\n",t[],ans);
}
return ;
}

Warfare And Logistics UVA - 1416的更多相关文章

  1. UVA1416 Warfare And Logistics

    UVA1416 Warfare And Logistics 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36232 [ ...

  2. uva 1416 Warfare And Logistics

    题意: 给出一个无向图,定义这个无向图的花费是 其中path(i,j),是i到j的最短路. 去掉其中一条边之后,花费为c’,问c’ – c的最大值,输出c和c’. 思路: 枚举每条边,每次把这条边去掉 ...

  3. UVA - 1416 Warfare And Logistics (最短路)

    Description The army of United Nations launched a new wave of air strikes on terroristforces. The ob ...

  4. UVA 4080 Warfare And Logistics 战争与物流 (最短路树,变形)

    题意: 给一个无向图,n个点,m条边,可不连通,可重边,可多余边.两个问题,第一问:求任意点对之间最短距离之和.第二问:必须删除一条边,再求第一问,使得结果变得更大. 思路: 其实都是在求最短路的过程 ...

  5. UVALive 4080 Warfare And Logistics (最短路树)

    很多的边会被删掉,需要排除一些干扰进行优化. 和UVA - 1279 Asteroid Rangers类似,本题最关键的地方在于,对于一个单源的最短路径来说,如果最短路树上的边没有改变的话,那么最短路 ...

  6. 【UVA1416】(LA4080) Warfare And Logistics (单源最短路)

    题目: Sample Input4 6 10001 3 21 4 42 1 32 3 33 4 14 2 2Sample Output28 38 题意: 给出n个节点m条无向边的图,每条边权都为正.令 ...

  7. LA4080/UVa1416 Warfare And Logistics 最短路树

    题目大意: 求图中两两点对最短距离之和 允许你删除一条边,让你最大化删除这个边之后的图中两两点对最短距离之和. 暴力:每次枚举删除哪条边,以每个点为源点做一次最短路,复杂度\(O(NM^2logN)\ ...

  8. la4080 Warfare And Logistics 罗列+最短

    为了图.计算最短随机分ans1.和删除边缘.免费才能够获得最大和短路之间的最大分ans2,如果这两个不沟通.看作是两个点之间的最短距离l. 第一个想法是枚举每个边缘,然后运行n最短时间.但是,这种复杂 ...

  9. UVA1416/LA4080 Warfare And Logistics

    题目大意:有N个点,M条路,如果两条路不连通的话,就将这两条路的距离设置为L 现在要求你求出每两点之间的最短距离和 接着要求 求出炸断 给出的M条路中的一条路后,每两点之间的最短距离和的最大值(翻译来 ...

随机推荐

  1. 通过js获取tinymce4.x的值

    问题的引出: 在使用过程中,用传统的js的方法判断tinymce所选textarea(下面直接称textarea)的值是会出现这样的问题的: 在已有输入内容时,首次提交的时候,依然会弹出js写的警告提 ...

  2. java 当前时间月份

    public static void main(String[] arg) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd ...

  3. 解决chrome浏览器崩溃,再次安装不上问题

    上网重新下载了个安装包,发现安装包都打不来 很绝望,查了很多资料 很多人说要删除注册表的东西 但是打开注册表,发现一堆google的东西,手动删根本不现实 在绝望中看到了解决方案:google Upd ...

  4. Java 中的 syncronized 你真的用对了吗

    生活中随处可见并行的例子,并行 顾名思义就是一起进行的意思,同样的程序在某些时候也需要并行来提高效率,在上一篇文章中我们了解了 Java 语言对缓存导致的可见性问题.编译优化导致的顺序性问题的解决方法 ...

  5. CSS新增的伪类选择器

    :root 选择文档的根元素,等同于 html 元素 :empty 选择没有子元素的元素 :target 选取当前活动的目标元素 :not(selector) 选择除 selector 元素意外的元素 ...

  6. 03爬虫-requests模块基础(1)

    requests模块基础 什么是requests模块 requests模块是python中原生基于网络模拟浏览器发送请求模块.功能强大,用法简洁高效. 为什么要是用requests模块 用以前的url ...

  7. Python3.7.4入门-2流程控制工具

    2 流程控制工具 记得在语句后加冒号 2.1 while # Fibonacci series: # the sum of two elements defines the next a, b = 0 ...

  8. Mysql学习笔记整理之索引

    索引的概念: 索引是一个分散存储的数据结构(检索)对数据库表中一列或多列的值进行排序 为什么要用索引? 索引能极大的减少存储引擎需要扫描的数据量 索引可以把随机IO变成顺序IO 索引可以帮助我们进行分 ...

  9. thinkphp将上传的临时文件移动到指定目录

    thinkphp将上传的临时文件移动到指定目录 新建common.php文件 <?phpuse think\facade\Env; /** 移动上传的临时文件 * * @img_dir stri ...

  10. Appium+python自动化(三十八) - Appium自动化测试框架综合实践 - 框架简介-助你冲击高薪,迎娶白富美(超详解)

    简介 好久没有更新博客了,博友们是不是有点等不及了.不好意思啊,中秋节过后太忙了,这篇是好不容易抽点零碎时间写的.从这一篇开始小伙伴或者童鞋们,就跟随宏哥的脚步,一步步的从无到有,从0到1的搭建一个完 ...