dijkstra求最小环
任意一个环的权值,我们都可以看成两个有边相连的结点i、j的直接距离加上i、j间不包含边(边i->j)的最短路径。
求最短路径我们第一个想到的就是Dijkstra算法。
而Dijkstra所求的是一个点到所有点的最短距离。
用Dijkstra所求的i、j的最短距离一定是i、j的直接距离(如果i,j连通),所以我们需要先将i、j的边从图中删除(若i,j不连通,则不用删除),再用Dijkstra求新图中i、j的最短距离即可。
所以我们每次在图中选取一条边,把它从图中删掉.
然后对删掉的那条边所对应的2点进行Dijkstra,也就是m次Dijkstra。
时间复杂度:若为稀疏图,复杂度为O(n^3)
若为稠密图,复杂度为O(n^4)
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<cmath>
#define ll long long
#define DB double
#define mod 1000000007
#define eps 1e-3
#define inf 2147483600
using namespace std;
inline int read()
{
int x=,w=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-') w=-;ch=getchar();}
while(ch>='' && ch<='') x=(x<<)+(x<<)+ch-'',ch=getchar();
return x*w;
}
const int N=1e3+;
struct node{
int u,v,c,ne;
}e[N];
int h[N],tot,n,m,x,y;
void add(int u,int v,int c)
{
tot++;e[tot]=(node){u,v,c,h[u]};h[u]=tot;
}
struct kk{
int id,dis;
bool operator<(const kk &x)const{
return dis>x.dis;
}
};
int d[N],v[N],ans;
priority_queue<kk>q;
void dijkstra(int s)
{
for(int i=;i<=n;++i) d[i]=inf,v[i]=;
d[s]=;q.push((kk){s,});
while(!q.empty())
{
int ff=q.top().id,dis=q.top().dis;q.pop();
if(v[ff]) continue;
v[ff]=;
for(int i=h[ff];i;i=e[i].ne)
{
int rr=e[i].v;
if(ff==x && rr==y) continue;
if(ff==y && rr==x) continue;
d[rr]=dis+e[i].c;
q.push((kk){rr,d[rr]});
}
}
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
tot=;ans=inf;
memset(h,,sizeof(h));
for(int i=;i<=m;++i)
{
int x,y,c;x=read();y=read();c=read();
add(x,y,c);add(y,x,c);
}
for(int i=;i<=tot;i+=)
{
x=e[i].u;y=e[i].v;
dijkstra(x);
ans=min(ans,d[y]+e[i].c);
}
if(ans==inf) cout<<"It's impossible."<<endl;
else cout<<ans<<endl;
}
return ;
}
大部分情况下还是不用这个的,因为会T很惨。
喵喵~~
dijkstra求最小环的更多相关文章
- floyd求最小环 模板
http://www.cnblogs.com/Yz81128/archive/2012/08/15/2640940.html 求最小环 floyd求最小环 2011-08-14 9:42 1 定义: ...
- floyd原理以及求最小环
floyd这个东西学会了好久了,但是原理总是忘记,或者说没有真正的明白,这里在说一下. 我们要求的是任意的 i,j 之间的最短路径,用动态规划的思想来解决就是f[i,j,k]表示i到j中间节点不超过k ...
- BZOJ_1027_[JSOI2007]_合金_(计算几何+Floyd求最小环)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1027 共三种金属,\(m\)种材料,给出每种材料中三种金属的占比. 给出\(n\)种合金的三种 ...
- hdu 1599 find the mincost route(flyod求最小环)
Problem Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1, ...
- FLOYD 求最小环
首先 先介绍一下 FLOYD算法的基本思想 设d[i,j,k]是在只允许经过结点1…k的情况下i到j的最短路长度则它有两种情况(想一想,为什么):最短路经过点k,d[i,j,k]=d[i,k,k- ...
- 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
- Floyd求最小环!(转载,非原创) 附加习题(原创。)HDU-1599
//Floyd 的 改进写法可以解决最小环问题,时间复杂度依然是 O(n^3),储存结构也是邻接矩阵 int mincircle = infinity; Dist = Graph; ;k<nVe ...
- 2018.09.15 hdu1599find the mincost route(floyd求最小环)
传送门 floyd求最小环的板子题目. 就是枚举两个相邻的点求最小环就行了. 代码: #include<bits/stdc++.h> #define inf 0x3f3f3f3f3f3f ...
- LOJ2421 NOIP2015 信息传递 【tarjan求最小环】
LOJ2421 NOIP2015 信息传递 LINK 题目大意就是给你一个有向图,求最小环 有一个很奇妙的性质叫做每个点只有一条出边 然后我们考虑对每个强联通分量进行考虑 发现每个强联通分量内的边数一 ...
随机推荐
- delphi中的inpubox,如何能控制它的位置? 10
https://zhidao.baidu.com/question/153270855.html delphi中的inpubox,如何能控制它的位置? 10 RT ! 前辈!最好你就把那代码都拿出来吧 ...
- PHP 常用函数-url函数
urlencode 和 rawurlencode urlencode 和 rawurlencode 两个函数都用来编码 URL 字符串.除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后 ...
- Bootstrap 学习笔记 项目实战 响应式轮播图
左右两个箭头可以随浏览器缩放进行移动 保持在图片中间 Html代码: <!DOCTYPE html> <html lang="zh-cn"> <hea ...
- dom元素的自上而下自动滚动
dom元素的自上而下自动滚动 <!doctype html> <html lang="en"> <head> <meta charset= ...
- python基础-9.1 面向对象进阶 super 类对象成员 类属性 私有属性 查找源码类对象步骤 类特殊成员 isinstance issubclass 异常处理
上一篇文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象 ...
- 单片机BootLoader
http://bbs.elecfans.com/jishu_467138_1_1.html 作用:app程序,固件程序升级
- JAVA总结--JDK版本区别
jdk1.5的新特性: 1.泛型 2.自动拆箱装箱 3.foreach 4.静态导入(Static import) 此外,枚举.元数据(Metadata).线程池.Java Generics ...
- [BZOJ4182]Shopping (点分治+树上多重背包+单调队列优化)
[BZOJ4182]Shopping (点分治+树上多重背包+单调队列优化) 题面 马上就是小苗的生日了,为了给小苗准备礼物,小葱兴冲冲地来到了商店街.商店街有n个商店,并且它们之间的道路构成了一颗树 ...
- Mysql共享锁、排他锁、悲观锁、乐观锁
一.相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--间隙锁( ...
- 创建带标签页的MDI WinForms应用程序
http://www.cnblogs.com/island/archive/2008/12/02/mditab.html 创建MDI应用程序 先创建”Windows窗体应用程序”解决方案Tabable ...