UVAlive4080_Warfare And Logistics
给一个无向图,求出两个值,所有点到所有其他点的最短距离和,任意删除一条边后的这个值。
数据规模是100点1000边。
白书例题,不多说了直接对于每个点求出最短路树,对于每条边,如果它不是最短路树上的边,那么我们不需要对它进行最短路计算了,由于点数只有100,那么树上的边只有n-1,所以我们对于以每个点为源点的树,只需要重新计算n-1次最短路即可,每次计算复杂度为n*m,最终复杂度就是n*n*m*log()。个人觉得有点高,不过实际跑起来还是很快的。
注意有重边,要多加判断了。
召唤代码君:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#define maxn 2222
typedef long long ll;
using namespace std; struct heapnode{
ll D,U;
bool operator < (heapnode ND) const {
return D>ND.D;
}
};
ll inf=~0U>>;
ll to[maxn],c[maxn],next[maxn],first[maxn],edge;
ll u[maxn],v[maxn],w[maxn],minlen[maxn][maxn],tim[maxn][maxn];
ll dis[maxn],from[maxn],C[maxn],f[maxn][maxn];
bool key[maxn],akey[maxn],done[maxn];
ll n,m,L,ans,sum; void _init()
{
edge=-,sum=ans=;
for (int i=; i<=n; i++)
{
first[i]=-,C[i]=;
for (int j=; j<=n; j++) minlen[i][j]=inf;
for (int j=; j<=m; j++) f[i][j]=;
}
} void addedge(int U,int V,int W)
{
edge++;
to[edge]=V,c[edge]=W,next[edge]=first[U],first[U]=edge;
edge++;
to[edge]=U,c[edge]=W,next[edge]=first[V],first[V]=edge;
} ll dijkstra(int S,int EG,ll Dis[],ll From[],bool Key[])
{
priority_queue<heapnode> Q;
for (int i=; i<=n || i<=m; i++)
{
if (i<=n) Dis[i]=inf,From[i]=-,done[i]=false;
if (i<=m) Key[i]=false;
}
Dis[S]=;
Q.push((heapnode){,S});
while (!Q.empty())
{
heapnode ND=Q.top();
Q.pop();
int cur=ND.U;
if (done[cur]) continue;
else done[cur]=true;
if (From[cur]!=-) Key[From[cur]/+]=true;
for (int i=first[cur]; i!=-; i=next[i])
if (i!=EG+EG- && i!=EG+EG- && Dis[cur]+c[i]<Dis[to[i]])
{
Dis[to[i]]=Dis[cur]+c[i];
From[to[i]]=i;
Q.push((heapnode){Dis[to[i]],to[i]});
}
}
ll tot=;
for (int i=; i<=n; i++)
if (Dis[i]!=inf) tot+=Dis[i];
else tot+=L;
return tot;
} int main()
{
inf*=inf;
while (scanf("%lld%lld%lld",&n,&m,&L)!=EOF)
{
_init();
for (int i=; i<=m; i++)
{
scanf("%lld%lld%lld",&u[i],&v[i],&w[i]);
addedge(u[i],v[i],w[i]);
if (w[i]<minlen[u[i]][v[i]]) minlen[u[i]][v[i]]=minlen[v[i]][u[i]]=w[i],tim[u[i]][v[i]]=tim[v[i]][u[i]]=;
else if (w[i]==minlen[u[i]][v[i]]) tim[u[i]][v[i]]++,tim[v[i]][u[i]]++;
}
for (int i=; i<=n; i++)
{
C[i]=dijkstra(i,m+,dis,from,key);
ans+=C[i];
for (int j=; j<=m; j++)
if (!key[j] || tim[u[j]][v[j]]> || minlen[u[j]][v[j]]!=w[j]) f[i][j]=C[i];
else f[i][j]=dijkstra(i,j,dis,from,akey);
}
for (int i=; i<=m; i++)
{
ll tmp=;
for (ll j=; j<=n; j++) tmp+=f[j][i];
sum=max(sum,tmp);
}
printf("%lld %lld\n",ans,sum);
}
return ;
}
UVAlive4080_Warfare And Logistics的更多相关文章
- .VDI manual Technical Logistics - Volume 2: Industrial Trucks
VDI manual Technical Logistics - Volume 2: Industrial Trucks Name Publication date: State VDI 2196 B ...
- UVA1416 Warfare And Logistics
UVA1416 Warfare And Logistics 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=36232 [ ...
- 笔记+R︱Logistics建模简述(logit值、sigmoid函数)
本笔记源于CDA-DSC课程,由常国珍老师主讲.该训练营第一期为风控主题,培训内容十分紧凑,非常好,推荐:CDA数据科学家训练营 ---------------------------------- ...
- logistics回归理解
多元回归方程:假设有一个因变量y和一组自变量x1, x2, x3, ... , xn,其中y为连续变量,我们可以拟合一个线性方程: y =β0 +β1*x1 +β2*x2 +β3*x3 +...+βn ...
- logistics回归简单应用(二)
警告:本文为小白入门学习笔记 网上下载的数据集链接:https://pan.baidu.com/s/1NwSXJOCzgihPFZfw3NfnfA 密码: jmwz 不知道这个数据集干什么用的,根据直 ...
- logistics回归简单应用——梯度下降,梯度上升,牛顿算法(一)
警告:本文为小白入门学习笔记 由于之前写过详细的过程,所以接下来就简单描述,主要写实现中遇到的问题. 数据集是关于80人两门成绩来区分能否入学: 数据集: http://openclassroom.s ...
- python3二元Logistics Regression 回归分析(LogisticRegression)
纲要 boss说增加项目平台分析方法: T检验(独立样本T检验).线性回归.二元Logistics回归.因子分析.可靠性分析 根本不懂,一脸懵逼状态,分析部确实有人才,反正我是一脸懵 首先解释什么是二 ...
- 机器学习算法的Python实现 (1):logistics回归 与 线性判别分析(LDA)
先收藏............ 本文为笔者在学习周志华老师的机器学习教材后,写的课后习题的的编程题.之前放在答案的博文中,现在重新进行整理,将需要实现代码的部分单独拿出来,慢慢积累.希望能写一个机器学 ...
- 1.2、Logistics Regression算法实践
1.1.Logistics Regression算法实践 有了上篇博客的理论准备后,接下来,我们用以及完成的函数,构建Logistics Regression分类器.我们利用线性可分的数据作为训练样 ...
随机推荐
- 【JUC源码解析】SynchronousQueue
简介 SynchronousQueue是一种特殊的阻塞队列,该队列没有容量. [存数据线程]到达队列后,若发现没有[取数据线程]在此等待,则[存数据线程]便入队等待,直到有[取数据线程]来取数据,并释 ...
- Cocos2DX开发:记录遇到的一些问题和解决方法
今天看了一下以前学习cocos2dx时记录的一些笔记,主要是在实际中遇到的一些问题,整理了一下,就成为了这篇文章,便于自己以后查找,也为一些新手提供点经验. 这篇文章会一直更新,将自己之后开发中遇到的 ...
- 把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败 在python3中调用会成功,但是调用不能成功的解决方案
把模块有关联的放在一个文件夹中 在python2中调用文件夹名会直接失败在python3中调用会成功,但是调用不能成功 解决办法是: 在该文件夹下加入空文件__init__.py python2会把该 ...
- 推荐一个娱乐化学习python的网站
https://py.checkio.org/ 这个网站通过解决一些小任务引导初学者了解和使用python来处理一些实际需求.在coding的过程中还可以通过查看提示,帮助完成任务. 不过需要一点英文 ...
- jmeter功能按钮介绍
Jmeter本来是做性能测试的,所以有很多监听器都是针对性能的,随后边的不断发展,可以应用到接口自动化等测试工作上. 面板的文件菜单中一般都是打开.保存.新建测试的,如下图: 保存时可以直接ctrl+ ...
- 帝国cms后台集成ueditor编辑器
我更换成百度编辑器的原因有以下几点:1.使用百度编辑器的图片粘贴上传功能,这个功能实在是太有必要了,有开发的过程中或上传的过程中,通常用qq直接截图,直接放到文章上面,避免了再放到本地保存的情况,真是 ...
- 企业服务总线ESB
# 企业服务总线ESB 由中间件技术实现并支持SOA的一组基础架构,支持异构环境中的服务.消息以及基于事件的交互,并且具有适当的服务级别和可管理性. 通过使用ESB,可以在几乎不更改代码的情况下,以一 ...
- 从零开始的Python学习Episode 21——socket基础
socket基础 网络通信要素: A:IP地址 (1) 用来标识网络上一台独立的主机 (2) IP地址 = 网络地址 + 主机地址(网络号:用于识别主机所在的网络/网段.主机号:用于识别该网络中的 ...
- linux安装配置JDK脚本
#!/bin/bash # install jdk and configuring environment variables function installjdk(){ tar -zxf jdk- ...
- Oracle VM VirtualBox 无法卸载 更新 和修复
好久没更新Oracle VM VirtualBox 突然发现不能更新了 提示要某个msi文件,回想起来好像是被某个清理垃圾的软件清理掉了. 于是根据提示的版本号网上搜了种子又把安装包下载回来 在命令行 ...