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=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无向图求最小环相关推荐
- POJ1734(floyd求最小环的路径)
题目:Sightseeing trip 题意:求一个图中最小环,输出路径. #include <iostream> #include <string.h> #include & ...
- 算法 图中求最小环路径 最小环个数 最大平均环 求简单无向图中环的个数
最小环问题:求个图中环路径代价最小的回路. 如何求最小环?假如有 路径1->3->2,如果此时已经知道2-1的最短路径就好了. 回想下floyed的更新过程,就会发现更新第k次时,比k小的 ...
- 多源最短路径Floyd、Floyd求最小环【模板】
Floyd算法:用来找出每对点之间的最短距离.图可以是无向图,也可以是有向图,边权可为正,也可以为负,唯一要求是不能有负环. 1.初始化:将Map[][]中的数据复制到Dist[][]中作为每对顶点 ...
- Gym - 100917F Find the Length-用最小路径树求最小环
https://codeforces.com/gym/100917/problem/F 题目大意:就给你一个无向图,求出所有点属于的最小环大小. 思路:我们给每一个点用dji求出最小路径树,然后对于一 ...
- 图论:并查集求最小环
图论:并查集求最小环 概念: 图.路.环: 一个有向图由G=(N,A)表示,其中N表示节点集,A表示边集边(i,j)为一有序对,i为出发节点,j为终止节点.在无向图中(i,j)与(j,i)一致. 路是 ...
- Acwing 344.观光之旅(Floyd求最小环)
Acwing 344.观光之旅 题意 给定一张无向图,求图中一个至少包含 3 个点的环,环上的节点不重复,并且环上的边的长度之和最小. 该问题称为无向图的最小环问题. 你需要输出最小环的方案,若最小环 ...
- hdu 1599(Floyd求最小环)
find the mincost route Time Limit: 1000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
- floyd求最小环 模板
http://www.cnblogs.com/Yz81128/archive/2012/08/15/2640940.html 求最小环 floyd求最小环 2011-08-14 9:42 1 定义: ...
最新文章
- oracle求sql的cpu贡献率,oracle 实时查询最耗CPU资源的SQL语句
- C#中提示:可访问性不一致:参数类型XXX比方法XXX的可访问性低
- python123.io作业_Python自动化开发学习3
- HDU - 6333 Problem B. Harvest of Apples(莫队变形+思维+组合数学,好题)
- CF773F Test Data Generation(倍增FFT/动态规划)
- 贝叶斯数据分析_科研进阶项目 | 剑桥大学 | 心理学、社会学、生物医学:统计数据分析(6.13开课)...
- UT源码105032014052
- python中for和while区别_Python的while 1跟while True到底有什么区别?
- SIM900A高效完整的STM32代码
- java随机生成6位流水号,Java生成随机流水号
- java抽象类详细介绍
- 学习笔记 JavaScript ES6 声明方式const(二)
- DM运维踩坑实践总结
- 安装Cisco Packet Tracer
- linux 多核 双系统,Linux GRUB实现双系统引导教程
- 《读书是教师最好的修行》读后感优秀范文2200字
- ZCS证书的重新签发
- Swift实战之2048小游戏
- MySQL-数据查询语言(DQL)
- HTML5小游戏笑说米,活跃气氛的70个小游戏 带动气氛的小游戏
热门文章
- 电子邮件地址验证:详细解释,生产质量WPF文本框代码
- rust腐蚀深井_深井开采中的地压现象致因分析及措施_高光
- starima与arima 预测_38-一些预测模型与方法简介(ARIMA、指数平滑等)
- 域用用户怎么允许共享_w7如何共享打印机 w7共享打印机步骤【详细介绍】
- 图片裁剪(cropperjs)
- 用科学计算机log21 p x,山东理工大学数据结构期末 试题及答案
- mysql 远程安装linux命令,Linux mysql命令安装允许远程连接的安装设置方法
- mysql连接数据了的dep_Mysql-多表连接的操作和用法
- 生日快乐页面_宇智波佐助生日快乐!参与活动,豚豚为你送福利!
- angular ts 表格_angular+ng-zorro路由、表格组件