uva 1416 Warfare And Logistics
题意:
给出一个无向图,定义这个无向图的花费是
其中path(i,j),是i到j的最短路。
去掉其中一条边之后,花费为c’,问c’ – c的最大值,输出c和c’。
思路:
枚举每条边,每次把这条边去掉,然后以每个点为起点,跑一次Dijkstra,再计算总花费。
这样的复杂度为O(mn^2log(n)),这个复杂度刚好卡着时间过,所以是暴力,更优的方法是最短路树(待学习。
代码:
#include <stdio.h>
#include <string.h>
#include <vector>
#include <queue>
using namespace std; struct edge
{
int to,cost;
int id; edge(int uu,int vv,int idd)
{
to = uu;
cost = vv;
id = idd;
}
}; const int maxn = ; typedef pair<long long,int> pii;
long long d[maxn];
vector<edge> g[maxn];
bool ma[]; void adde(int st,int en,int cost,int id)
{
g[st].push_back(edge(en,cost,id));
} void dij(int s,int n)
{
for (int i = ;i <= n;i++) d[i] = 1e16; priority_queue<pii,vector<pii>,greater<pii> > pq; pq.push(pii(,s)); d[s] = ; //printf("***\n"); while (!pq.empty())
{
pii x = pq.top();pq.pop(); int v = x.second; if (d[v] < x.first) continue; for (int i = ;i < g[v].size();i++)
{
edge e = g[v][i]; if (d[e.to] > d[v] + e.cost)
{
d[e.to] = d[v] + e.cost;
pq.push(pii(d[e.to],e.to));
}
}
} //printf("***\n");
} void dijk(int s,int n)
{
for (int i = ;i <= n;i++) d[i] = 1e16; priority_queue<pii,vector<pii>,greater<pii> > pq; pq.push(pii(,s)); d[s] = ; while (!pq.empty())
{
pii x = pq.top();pq.pop(); int v = x.second; if (d[v] < x.first) continue; for (int i = ;i < g[v].size();i++)
{
edge e = g[v][i]; if (ma[e.id]) continue; if (d[e.to] > d[v] + e.cost)
{
d[e.to] = d[v] + e.cost;
pq.push(pii(d[e.to],e.to));
}
}
} //printf("***\n");
} int main()
{
int n,m,l; while (scanf("%d%d%d",&n,&m,&l) != EOF)
{
for (int i = ;i <= n;i++) g[i].clear(); for (int i = ;i < m;i++)
{
int a,b,c; scanf("%d%d%d",&a,&b,&c); adde(a,b,c,i);
adde(b,a,c,i);
} long long ans = ; for (int i = ;i <= n;i++)
{ dij(i,n); for (int j = ;j <= n;j++)
{
if (d[j] == 1e16) d[j] = l;
ans += d[j];
}
} long long res = ;
long long tmp = ; for (int i = ;i < m;i++)
{
ma[i] = ; long long orz = ; for (int j = ;j <= n;j++)
{
dijk(j,n); for (int k = ;k <= n;k++)
{
if (d[k] == 1e16) d[k] = l;
orz += d[k];
}
} if (orz - ans > tmp)
{
res = orz;
tmp = orz - ans;
} ma[i] = ;
} printf("%lld %lld\n",ans,res);
} return ;
}
uva 1416 Warfare And Logistics的更多相关文章
- UVA - 1416 Warfare And Logistics (最短路)
Description The army of United Nations launched a new wave of air strikes on terroristforces. The ob ...
- UVA 4080 Warfare And Logistics 战争与物流 (最短路树,变形)
题意: 给一个无向图,n个点,m条边,可不连通,可重边,可多余边.两个问题,第一问:求任意点对之间最短距离之和.第二问:必须删除一条边,再求第一问,使得结果变得更大. 思路: 其实都是在求最短路的过程 ...
- UVA1416 Warfare And Logistics
UVA1416 Warfare And Logistics 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36232 [ ...
- Warfare And Logistics UVA - 1416
题目链接:https://vjudge.net/problem/UVA-1416 题解: 这是一个最短路的好题,首先我们考虑如果暴力弗洛伊德,显然时间复杂度不对,如果做n次spfa好像复杂度也不对,所 ...
- UVALive 4080 Warfare And Logistics (最短路树)
很多的边会被删掉,需要排除一些干扰进行优化. 和UVA - 1279 Asteroid Rangers类似,本题最关键的地方在于,对于一个单源的最短路径来说,如果最短路树上的边没有改变的话,那么最短路 ...
- 【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条无向边的图,每条边权都为正.令 ...
- LA4080/UVa1416 Warfare And Logistics 最短路树
题目大意: 求图中两两点对最短距离之和 允许你删除一条边,让你最大化删除这个边之后的图中两两点对最短距离之和. 暴力:每次枚举删除哪条边,以每个点为源点做一次最短路,复杂度\(O(NM^2logN)\ ...
- la4080 Warfare And Logistics 罗列+最短
为了图.计算最短随机分ans1.和删除边缘.免费才能够获得最大和短路之间的最大分ans2,如果这两个不沟通.看作是两个点之间的最短距离l. 第一个想法是枚举每个边缘,然后运行n最短时间.但是,这种复杂 ...
- UVA1416/LA4080 Warfare And Logistics
题目大意:有N个点,M条路,如果两条路不连通的话,就将这两条路的距离设置为L 现在要求你求出每两点之间的最短距离和 接着要求 求出炸断 给出的M条路中的一条路后,每两点之间的最短距离和的最大值(翻译来 ...
随机推荐
- 【python-opencv】30-角点检测
[微语]世上有很多不可能,不过不要在你未尽全力之前下结论 特征检测:找到图像特征的技术 特征描述:描述图像特征 Harris角点检测(Corner Detection) 参考: https://doc ...
- MVVM软件设计模式(转)
add by zhj: MVVM是一种软件设计模式,这里要说一下设计模式,我们通常所的设计模式是指面向对象中的设计模式,用在面向对象编程语言中.但软件设计模式是更高一个级别的设计模式,两者不是同一个东 ...
- JavaScript学习(六)
这里要注意: 1.num为NaN(因为str的开头不是数字) 2.NaN和NaN是不等的 3.NaN也是number.
- 【托业】【新托业TOEIC新题型真题】学习笔记2-题库一-->P5-6
P5-6 --------------------------------------单词-------------------------------------- transfrom 转化 jus ...
- QPS、PV 、RT(响应时间)之间的关系
QPS.PV .RT(响应时间)之间的关系 在进行系统性能压测和系统性能优化的时候,会涉及到QPS,PV,RT相关的概念,本文总结一下QPS,PV,RT之间的关系,放在博客备忘,本文参考了之前在淘宝工 ...
- 前端 HTML body标签相关内容 常用标签 表格标签 table
表格标签 table 表格由<table> 标签来定义.每个表格均有若干行(由 <tr> 标签定义),每行被分割为若干单元格(由<td>标签定义).字母 td 指表 ...
- Github上Laravel开源排行榜Star数前30名
Github上Laravel开源排行榜前30名,罗列所有 Laravel 开源扩展包,含 Github Star 数量,下载数量和项目简介.默认排序是按Star数量从多到少来排 1.cachethq/ ...
- Java基础知识(JAVA之IO流)
学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各 ...
- kafka6 编写使用自定义分区的生产者
一 客户端 在上一篇博客创建的简单生产者的基础上,进行两个修改操作: 1.新建SimplePartitioner.java,修改返回分区为1. SimplePartitioner.java代码如下 p ...
- mysql在linux上的安装
前提: 环境:workstation 11 + CentOS 7 + mysql-5.6.40 安装前先查看服务器里是否有老版本的mysql已经被安装了 rpm -qa|grep mysql 如果有就 ...