POJ1734无向图求最小环
题目:http://poj.org/problem?id=1734
方法有点像floyd。若与k直接相连的 i 和 j 在不经过k的情况下已经连通,则有环。
注意区分直接连接和间接连接。
* 路径记录很好,pre[i][j]表示 i 到 j 的路径上 j 的前一个点;用固定的 i 保证了不混乱。新加入k的时候注意维护。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const ll N=,INF=0x7fffffff;
int n,m,pre[N][N],ans[N],cnt;
ll f[N][N],mn=INF,b[N][N];
int main()
{
int x,y;ll z;
memset(f,,sizeof f);
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d%lld",&x,&y,&z);
if(b[x][y])
f[x][y]=f[y][x]=b[x][y]=b[y][x]=min(f[x][y],z);
else
{
f[x][y]=f[y][x]=z;
b[x][y]=b[y][x]=z;
pre[x][y]=x;pre[y][x]=y;
}
}
for(int k=;k<=n;k++)
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
{
if(b[i][k]&&b[j][k]&&f[i][j]<INF)
{
ll tmp=f[i][j]+b[i][k]+b[j][k];//不是f[i][k]
// if(k==5&&i==2&&j==3)printf("tmp=%lld\n",tmp);
if(tmp<mn)
{
// printf("i=%d j=%d k=%d fij=%lld tmp=%lld\n",i,j,k,f[i][j],tmp);
// printf("ij=%lld ik=%lld jk=%lld\n",f[i][j],f[i][k],f[j][k]);
mn=tmp;
cnt=;
for(int u=j;u!=i;u=pre[i][u])ans[++cnt]=u;
ans[++cnt]=i;ans[++cnt]=k;
}
}
// if(f[i][k]>INF||f[k][j]>INF)continue;//
ll tmp=f[i][k]+f[k][j];
if(tmp<f[i][j])
{
f[i][j]=f[j][i]=tmp;
pre[i][j]=pre[k][j];
pre[j][i]=pre[k][i];
// pre[i][j]=pre[j][i]=k;//错!不是直接相连!
// pre[i][k]=i;pre[j][k]=j;
// pre[k][i]=k;pre[k][j]=k;//
}
}
if(cnt)for(int i=;i<=cnt;i++)printf("%d ",ans[i]);
else printf("No solution.");
return ;
}
POJ1734无向图求最小环的更多相关文章
- poj1734Sightseeing trip——无向图求最小环
题目:http://poj.org/problem?id=1734 无向图求最小环,用floyd: 在每个k点更新f[i][j]之前,以k点作为直接连到i,j组成一个环的点,这样找一下最小环: 注意必 ...
- B. Shortest Cycle 无向图求最小环
题意: 给定 n 个点,每个点有一个权值a[i],如果a[u]&a[v] != 0,那么就可以在(u,v)之间连一条边,求最后图的最小环(环由几个点构成) 题解:逻辑运算 & 是二进制 ...
- POJ1734/Floyd求最小环
Sightseeing trip Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6647 Accepted: 2538 ...
- 算法复习——floyd求最小环(poj1734)
题目: 题目描述 N 个景区,任意两个景区之间有一条或多条双向的路来连接,现在 Mr.Zeng 想找一条旅游路线,这个路线从A点出发并且最后回到 A 点,假设经过的路线为 V1,V2,....VK,V ...
- POJ1734 Sightseeing trip (Floyd求最小环)
学习了一下用Floyd求最小环,思路还是比较清晰的. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring ...
- FLOYD 求最小环
首先 先介绍一下 FLOYD算法的基本思想 设d[i,j,k]是在只允许经过结点1…k的情况下i到j的最短路长度则它有两种情况(想一想,为什么):最短路经过点k,d[i,j,k]=d[i,k,k- ...
- hdu 1599 find the mincost route(无向图的最小环)
find the mincost route Time Limit: 1000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- 2021.11.03 P6175 无向图的最小环问题
2021.11.03 P6175 无向图的最小环问题 P6175 无向图的最小环问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 给定一张无向图,求图中一个至少包含 33 ...
- floyd原理以及求最小环
floyd这个东西学会了好久了,但是原理总是忘记,或者说没有真正的明白,这里在说一下. 我们要求的是任意的 i,j 之间的最短路径,用动态规划的思想来解决就是f[i,j,k]表示i到j中间节点不超过k ...
随机推荐
- 高性能mysql-----MySQL_explain关键字分析查询语句(一)
转载地址:https://www.cnblogs.com/xpp142857/p/7373005.html MySQL_explain关键字分析查询语句 通过对查询语句的分析,可以了解查询语句的执 ...
- python dict sorted 排序
https://www.cnblogs.com/linyawen/archive/2012/03/15/2398292.html 我们知道Python的内置dictionary数据类型是无序的,通过k ...
- html <table>标签信息
table的属性 border pixcels 规定表格边框的宽度 cellpadding picels/% 规定单元格边沿与内容之间的空白 cellspacing picels/% 规定表格以及单元 ...
- JAVASCRIPT开发HTML5游戏--斗地主(网络对战PART4)
继之前用游戏引擎(青瓷引擎)做了斗地主单机版游戏之后,这里分享下使用socket.io来实现网络对战,代码可已放到github上,在此谈谈自己整个的开发思路吧. 客户端代码 服务端代码 (点击图片进入 ...
- hdu4333
题解: EX_KMP 先把串复制一遍放到后面 这样旋转就是每一个前缀了 然后做一个EX_KMP 然后看一下后一个字符谁大谁小 代码: #include<cstdio> #include&l ...
- L1-042 日期格式化
世界上不同国家有不同的写日期的习惯.比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”.下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期. 输入格式: 输入在一行中按照“ ...
- myeclipse10 破解版安装
安装包请看百度云: step1 step2 step3 step4 step5 step6 安装 svn,可以参考: http://www.cnblogs.com/OnlyCT/p/6061134.h ...
- <constant name="struts.devMode" value="false" />
在开发中,我们常常会遇到<constant name="struts.devMode" value="false" />,这是struts2的特性, ...
- iOS开发之旅:实现一个APP界面框架
在上一篇博客中,给大家介绍了一下我们传统的 APP 界面框架-标签导航的一些优缺点,在这篇文章中我会来给大家演示,如何用代码去实现这一框架.本次的实现我会分成俩部分来讲,好了闲话少说,接下来进入到开发 ...
- magento如何改变首页的布局
打开MAGENTO_INSTALLED_DIR/app/design/frontend/default/default/layout/page.xml 找到名字为'root'的block定义 < ...