题目: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=105,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,1,sizeof f);scanf("%d%d",&n,&m);for(int i=1;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=1;k<=n;k++)for(int i=1;i<=n;i++)for(int j=i+1;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=0;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=1;i<=cnt;i++)printf("%d ",ans[i]);else printf("No solution.");return 0;
}

转载于:https://www.cnblogs.com/Narh/p/8783841.html

POJ1734无向图求最小环相关推荐

  1. POJ1734(floyd求最小环的路径)

    题目:Sightseeing trip 题意:求一个图中最小环,输出路径. #include <iostream> #include <string.h> #include & ...

  2. 算法 图中求最小环路径 最小环个数 最大平均环 求简单无向图中环的个数

    最小环问题:求个图中环路径代价最小的回路. 如何求最小环?假如有 路径1->3->2,如果此时已经知道2-1的最短路径就好了. 回想下floyed的更新过程,就会发现更新第k次时,比k小的 ...

  3. 多源最短路径Floyd、Floyd求最小环【模板】

    Floyd算法:用来找出每对点之间的最短距离.图可以是无向图,也可以是有向图,边权可为正,也可以为负,唯一要求是不能有负环.  1.初始化:将Map[][]中的数据复制到Dist[][]中作为每对顶点 ...

  4. Gym - 100917F Find the Length-用最小路径树求最小环

    https://codeforces.com/gym/100917/problem/F 题目大意:就给你一个无向图,求出所有点属于的最小环大小. 思路:我们给每一个点用dji求出最小路径树,然后对于一 ...

  5. 图论:并查集求最小环

    图论:并查集求最小环 概念: 图.路.环: 一个有向图由G=(N,A)表示,其中N表示节点集,A表示边集边(i,j)为一有序对,i为出发节点,j为终止节点.在无向图中(i,j)与(j,i)一致. 路是 ...

  6. Acwing 344.观光之旅(Floyd求最小环)

    Acwing 344.观光之旅 题意 给定一张无向图,求图中一个至少包含 3 个点的环,环上的节点不重复,并且环上的边的长度之和最小. 该问题称为无向图的最小环问题. 你需要输出最小环的方案,若最小环 ...

  7. hdu 1599(Floyd求最小环)

    find the mincost route Time Limit: 1000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

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

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

  9. floyd求最小环 模板

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

最新文章

  1. oracle求sql的cpu贡献率,oracle 实时查询最耗CPU资源的SQL语句
  2. C#中提示:可访问性不一致:参数类型XXX比方法XXX的可访问性低
  3. python123.io作业_Python自动化开发学习3
  4. HDU - 6333 Problem B. Harvest of Apples(莫队变形+思维+组合数学,好题)
  5. CF773F Test Data Generation(倍增FFT/动态规划)
  6. 贝叶斯数据分析_科研进阶项目 | 剑桥大学 | 心理学、社会学、生物医学:统计数据分析(6.13开课)...
  7. UT源码105032014052
  8. python中for和while区别_Python的while 1跟while True到底有什么区别?
  9. SIM900A高效完整的STM32代码
  10. java随机生成6位流水号,Java生成随机流水号
  11. java抽象类详细介绍
  12. 学习笔记 JavaScript ES6 声明方式const(二)
  13. DM运维踩坑实践总结
  14. 安装Cisco Packet Tracer
  15. linux 多核 双系统,Linux GRUB实现双系统引导教程
  16. 《读书是教师最好的修行》读后感优秀范文2200字
  17. ZCS证书的重新签发
  18. Swift实战之2048小游戏
  19. MySQL-数据查询语言(DQL)
  20. HTML5小游戏笑说米,活跃气氛的70个小游戏 带动气氛的小游戏

热门文章

  1. 电子邮件地址验证:详细解释,生产质量WPF文本框代码
  2. rust腐蚀深井_深井开采中的地压现象致因分析及措施_高光
  3. starima与arima 预测_38-一些预测模型与方法简介(ARIMA、指数平滑等)
  4. 域用用户怎么允许共享_w7如何共享打印机 w7共享打印机步骤【详细介绍】
  5. 图片裁剪(cropperjs)
  6. 用科学计算机log21 p x,山东理工大学数据结构期末 试题及答案
  7. mysql 远程安装linux命令,Linux mysql命令安装允许远程连接的安装设置方法
  8. mysql连接数据了的dep_Mysql-多表连接的操作和用法
  9. 生日快乐页面_宇智波佐助生日快乐!参与活动,豚豚为你送福利!
  10. angular ts 表格_angular+ng-zorro路由、表格组件