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 题目大意就是给你一个有向图,求最小环 有一个很奇妙的性质叫做每个点只有一条出边 然后我们考虑对每个强联通分量进行考虑 发现每个强联通分量内的边数一 ...
随机推荐
- curl 使用 post 请求,传递 json 参数,下载文件
curl -X POST http://ip:8888/nacos/v1/cs/file/download -H "Accept: application/octet-stream" ...
- Java Bean 使用包装类型 还是基本类型
参考:实体类中用基本类型好,还是用包装类型好_ - 牵牛花 - 博客园 int优缺点 优点: 1.用于Bean的时候,有默认值.比如自己拼接sql增加一个User时,会方便很多,不过现在都用ORM框架 ...
- 随机访问RandomAccessFile
public native long getFilePointer() throws IOException;//当前文件的指针位置是 import java.io.IOException; impo ...
- 【ABAP系列】SAP ABAP WS_DELIVERY_UPDATE 修改数量、过账日期并发货过账
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP WS_DELI ...
- mybatis001-动态标签Trim用法
Mybatis动态标签Trim用法 一.<trim></trim>标签用法 示例一: select * from user <trim prefix="WHER ...
- oracle--事物特性、锁、
update emp set comm = 100 where empno = 7369; 使用dba用户查看事务 ADDR XIDUSN XIDSLOT XIDSQN UBAFIL UBABLK U ...
- 【sql server复制】不重新初始化快照的情况下新增表/存储过程/函数等
转发自:https://www.cnblogs.com/datazhang/p/5498789.html sqlserver同步后在不重新初始化快照的情况下新增表 在已有事务复制中,时长 ...
- ajax与json总结
1.jquery中调用ajax方法 $.ajax({ async:true, type:"post", url:"xxxServlet", data:{&quo ...
- [SP3267]DQUERY - D query
题目传送门 维护一个区间内不同数的个数,最直观的想法是直接排序后用树状数组维护即可.但是我们发现n只有3e4,于是我们想到了可以拿一个$O(n\sqrt{n})$的莫队维护.关于莫队算法如果有不知道的 ...
- 2019牛客暑期多校训练营(第四场) - K - number - dp
https://ac.nowcoder.com/acm/contest/884/K 一开始整了好几个假算法,还好测了一下自己的样例过了. 考虑到300的倍数都是3的倍数+至少两个零(或者单独的0). ...