博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVAlive4080_Warfare And Logistics
阅读量:4657 次
发布时间:2019-06-09

本文共 1995 字,大约阅读时间需要 6 分钟。

给一个无向图,求出两个值,所有点到所有其他点的最短距离和,任意删除一条边后的这个值。

数据规模是100点1000边。

白书例题,不多说了直接对于每个点求出最短路树,对于每条边,如果它不是最短路树上的边,那么我们不需要对它进行最短路计算了,由于点数只有100,那么树上的边只有n-1,所以我们对于以每个点为源点的树,只需要重新计算n-1次最短路即可,每次计算复杂度为n*m,最终复杂度就是n*n*m*log()。个人觉得有点高,不过实际跑起来还是很快的。

注意有重边,要多加判断了。

 

 

召唤代码君:

 

 

#include 
#include
#include
#include
#define maxn 2222typedef long long ll;using namespace std;struct heapnode{ ll D,U; bool operator < (heapnode ND) const { return D>ND.D; }};ll inf=~0U>>2;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=-1,sum=ans=0; for (int i=1; i<=n; i++) { first[i]=-1,C[i]=0; for (int j=1; j<=n; j++) minlen[i][j]=inf; for (int j=1; j<=m; j++) f[i][j]=0; }}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
Q; for (int i=1; i<=n || i<=m; i++) { if (i<=n) Dis[i]=inf,From[i]=-1,done[i]=false; if (i<=m) Key[i]=false; } Dis[S]=0; Q.push((heapnode){
0,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]!=-1) Key[From[cur]/2+1]=true; for (int i=first[cur]; i!=-1; i=next[i]) if (i!=EG+EG-2 && i!=EG+EG-1 && Dis[cur]+c[i]
1 || 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=1; i<=m; i++) { ll tmp=0; for (ll j=1; j<=n; j++) tmp+=f[j][i]; sum=max(sum,tmp); } printf("%lld %lld\n",ans,sum); } return 0;}

转载于:https://www.cnblogs.com/lochan/p/3861507.html

你可能感兴趣的文章
[刷题]Codeforces 785D - Anton and School - 2
查看>>
四川红油的制法
查看>>
Java重写《C经典100题》 --21
查看>>
【Android基础】Fragment 详解之Fragment生命周期
查看>>
链表(裸题)
查看>>
11运算符重载
查看>>
磁盘系统的管理
查看>>
C/S
查看>>
Http Get/Post请求的区别
查看>>
STM32一键下载电路设计原理
查看>>
C语言中函数返回字符串的四种方法
查看>>
10月区块链领域投融资事件盘点
查看>>
Mybatis缓存策略
查看>>
卷积的意义【转】
查看>>
android图形系统详解五:Android绘制模式
查看>>
[剑指offer] 23. 二叉搜索树的后序遍历序列
查看>>
canvas绘画交叉波浪
查看>>
Linux 内核分析
查看>>
试一下:XP ( SP2 ) 本身就支持查杀流氓软件!
查看>>
centos6(7) minimal 基本环境配置
查看>>