Codeforces 25C Roads in Berland(floyed)
2016-02-18 14:34
435 查看
题目:http://codeforces.com/problemset/problem/25/C
代码:
分析:
题目给你一个已经 都是边 最短的图,往这个图里加边,没加一次输出所有最短路径的和。
正常暴力的话是 n^4。网上说是超时,那就超时吧。(压一包辣条第11组数据超时)
找 与A边相接(A是起点或终点) 的是否可以压缩。压缩
再找 与B边相接 (B是起点或终点)的是否可以压缩。压缩
再找 A和B不是起点或终点 的是否可以压缩。压缩。(大致就是这么个意思吧)时间复杂度降为3*n*n*n.
新技能GET。
代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; long long maps[305][305]; int n,m; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%I64d",&maps[i][j]); } } scanf("%d",&m); for(int e=0,a,b,c;e<m;e++) { scanf("%d%d%d",&a,&b,&c); if(maps[a][b]>c) { maps[a][b]=maps[b][a]=c; for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { maps[a][i]=maps[i][a]=min(maps[i][a],maps[a][b]+maps[b][i]); } } for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { maps[b][i]=maps[i][b]=min(maps[i][b],maps[b][a]+maps[a][i]); } } for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { maps[i][j]=maps[j][i]=min(maps[i][j],maps[i][a]+maps[a][j]); maps[i][j]=maps[j][i]=min(maps[j][i],maps[i][b]+maps[b][j]); } } } long long sum=0; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { sum=sum+maps[i][j]; } } printf("%I64d\n",sum); } }
分析:
题目给你一个已经 都是边 最短的图,往这个图里加边,没加一次输出所有最短路径的和。
正常暴力的话是 n^4。网上说是超时,那就超时吧。(压一包辣条第11组数据超时)
找 与A边相接(A是起点或终点) 的是否可以压缩。压缩
再找 与B边相接 (B是起点或终点)的是否可以压缩。压缩
再找 A和B不是起点或终点 的是否可以压缩。压缩。(大致就是这么个意思吧)时间复杂度降为3*n*n*n.
新技能GET。
相关文章推荐
- JavaScript中的正则表达式简介
- 页面分页插件 Bootstrap Paginator使用方法
- 互联网金融中的各条路子
- easyui dialog 有滚动条时的窗口定位
- js拼接运算符
- [群150178878]nRF51822学习笔记–硬件外设篇【1】
- Button.setOnClickListener(OnClickListener l) 原理
- 【python】编程语言入门经典100例--5
- 冬眠结束,醒醒吧
- Android快速开发 动画系列(一) 之 TranslateAnimation(平移动画)
- EditText(输入框)详解
- 64位win8.1下 安装配置instant client & plsqldev
- 理解Docker容器
- 错误: 程序包com.sun.istack.internal不存在
- iOS开发--AVFoundation自定义相机
- 我的PHP之路
- Fortran 第二课
- STM32 串口DMA方式接收数据
- Python 18.3 async/await
- RDO Stack:VMs cannot access external network.