最小环
来源:互联网 发布:经营数据分析 编辑:程序博客网 时间:2024/06/04 05:33
啊哈哈今天搞了搞最小环
嗯就是Floyd 我们不能那么直奔主题
首先有一种想法是Dijkstra
对于图中的每一条边(a,b),把它删除后求a-b的最短路
时间复杂度O(nlognm)[前提是你要用恶心死人的Dijkstra with heap]
所以我们就想到了Floyd
d[i,j]是初始图 f[i,j]是那个最短路的数组
设f[k,i,j]表示从i到j的路径中经过点最大不超过k的最短路长度
然后可得ans:=min(ans,f[k-1,i,j]+d[i,k]+d[j,k])
然后就没了
可用滚动数组优化空间
代码各种炫酷
const INF=1 shl 25;vard,f:array[0..101,0..101] of longint;n,m,a,b,c,ans,i,j,k:longint;procedure init;beginreadln(n,m);for i:=1 to n do for j:=1 to n do d[i,j]:=INF;for i:=1 to m dobeginreadln(a,b,c);d[a,b]:=c;d[b,a]:=c;end;ans:=INF;end;function min(a,b:longint):longint;inline;//这个inline各种重要 快了0.5s+beginif a<b then exit(a);exit(b);end;procedure main;begininit;f:=d;for k:=1 to n dobeginfor i:=1 to k dofor j:=i+1 to k do//这个i+1及其重要,反正i和j循环的时候不能相等就是了ans:=min(ans,f[i,j]+d[i,k]+d[j,k]);for i:=1 to n dofor j:=1 to n dof[i,j]:=min(f[i,j],f[i,k]+f[k,j]);end;if ans=INF then writeln('No solution.') else writeln(ans);end;begin main;end.
0 0
- 最小环
- 最小环
- 最小环
- floyd求最小环
- 最小环 timus1004
- floyed求最小环
- floyd求最小环
- 【最小环】Sightseeing Trip
- poj1734 最小环
- floyd求最小环
- hdu 1599 最小环
- floyd求最小环
- FLOYD 求最小环
- 【图论】最小环算法
- hdu 1599 最小环
- floyd求最小环
- floyd最小环
- 最小环(floyd)
- .net 从后台向前台添加控件
- wordpress密码生成与登录密码验证
- Codeforces 135A-Replacement(思维)
- 电信基站查询接口
- 用GetProcessMemoryInfo 函数 获取内存
- 最小环
- tmux 快捷键 不起作用
- Java Web开发基础(1)-Servlet
- 天气查询接口
- 安装msi安装包提示"在未标记为正在运行时,调用了RunScript”解决办法
- String类型转float,flost转String类型
- 交换机原理
- 使用命令生成Jar包
- C++实现快速排序(源代码)