任意一个环的权值,我们都可以看成两个有边相连的结点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求最小环的更多相关文章

  1. floyd求最小环 模板

    http://www.cnblogs.com/Yz81128/archive/2012/08/15/2640940.html 求最小环 floyd求最小环 2011-08-14 9:42 1 定义: ...

  2. floyd原理以及求最小环

    floyd这个东西学会了好久了,但是原理总是忘记,或者说没有真正的明白,这里在说一下. 我们要求的是任意的 i,j 之间的最短路径,用动态规划的思想来解决就是f[i,j,k]表示i到j中间节点不超过k ...

  3. BZOJ_1027_[JSOI2007]_合金_(计算几何+Floyd求最小环)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1027 共三种金属,\(m\)种材料,给出每种材料中三种金属的占比. 给出\(n\)种合金的三种 ...

  4. hdu 1599 find the mincost route(flyod求最小环)

    Problem Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1, ...

  5. FLOYD 求最小环

    首先 先介绍一下 FLOYD算法的基本思想   设d[i,j,k]是在只允许经过结点1…k的情况下i到j的最短路长度则它有两种情况(想一想,为什么):最短路经过点k,d[i,j,k]=d[i,k,k- ...

  6. 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】

    度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...

  7. Floyd求最小环!(转载,非原创) 附加习题(原创。)HDU-1599

    //Floyd 的 改进写法可以解决最小环问题,时间复杂度依然是 O(n^3),储存结构也是邻接矩阵 int mincircle = infinity; Dist = Graph; ;k<nVe ...

  8. 2018.09.15 hdu1599find the mincost route(floyd求最小环)

    传送门 floyd求最小环的板子题目. 就是枚举两个相邻的点求最小环就行了. 代码: #include<bits/stdc++.h> #define inf 0x3f3f3f3f3f3f ...

  9. LOJ2421 NOIP2015 信息传递 【tarjan求最小环】

    LOJ2421 NOIP2015 信息传递 LINK 题目大意就是给你一个有向图,求最小环 有一个很奇妙的性质叫做每个点只有一条出边 然后我们考虑对每个强联通分量进行考虑 发现每个强联通分量内的边数一 ...

随机推荐

  1. 阶段1 语言基础+高级_1-3-Java语言高级_03-常用API第二部分_第6节 基本类型包装类_1_包装类的概念

    只有这两个比较特殊

  2. python 操作openpyxl导出Excel 设置单元格格式以及合并处理

    贴上一个例子,里面设计很多用法,根据将相同日期的某些行合并处理. from openpyxl import Workbook from openpyxl.styles import Font, Fil ...

  3. WinForm 皮肤,自定义控件WinForm.UI

    WinForm.UI https://github.com/YuanJianTing/WinForm.UI WinForm 皮肤,自定义控件 使用方式: BaseForm: public partia ...

  4. GIt 工作区与暂存区

    转载:https://www.liaoxuefeng.com/wiki/896043488029600/897271968352576 工作区与暂存区 工作区(Working Directory) 就 ...

  5. 剑指offer--day06

    1.1 题目:调整数组顺序使奇数位语偶数前面:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的 ...

  6. REACT--》fetch---基本使用

    [WangQI]---fetch---基本使用   一.fetch fetch是一种XMLHttpRequest的一种替代方案,在工作当中除了用ajax获取后台数据外我们还可以使用fetch.axio ...

  7. C++学习笔记(七)--共用体、枚举、typedef

    1.共用体 union其定义与结构体类似:union 类型名{ 成员表列;};声明变量的方法也类似: a. union 类型名{            b. union { c.类型名 变量名; 成员 ...

  8. Vue—非父子组件间的传值(Bus/发布订阅模式/观察者模式/总线)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. SpringBoot(九) -- SpringBoot与数据访问

    一.简介 对于数据访问层,无论是SQL还是NOSQL,Spring Boot默认采用整合Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了很多设置.引入各种xxxTemplate,xx ...

  10. Java虚拟机最多支持多少个线程?

    作者:miracle1919  来源:http://sina.lt/getP McGovernTheory在StackOverflow提了这样一个问题:Java虚拟机最多支持多少个线程?跟虚拟机开发商 ...