学习了一下用Floyd求最小环,思路还是比较清晰的。

 1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<algorithm>
5 #include<vector>
6 using namespace std;
7 int a[310][310],d[310][310],pos[310][310];
8 int n,m,ans=0x3f3f3f3f;
9 vector<int> path;//用vector的领接表储存最小环方案
10 void get_path(int x,int y){
11 if(pos[x][y]==0) return ;
12 get_path(x,pos[x][y]);
13 path.push_back(pos[x][y]);
14 get_path(pos[x][y],y);
15 }
16
17 int main(){
18 cin>>n>>m;
19 memset(a,0x3f,sizeof(a));
20 for(int i=1;i<=n;i++) a[i][i]=0;
21 for(int i=1;i<=m;i++){
22 int x,y,z;
23 cin>>x>>y>>z;
24 a[y][x]=a[x][y]=min(a[x][y],z);//选择两点之间最短的路径
25 }
26 memcpy(d,a,sizeof(a));//将a全部复制到d中
27 for(int k=1;k<=n;k++){
28 for(int i=1;i<k;i++)
29 for(int j=i+1;j<k;j++)
30 if((long long)d[i][j]+a[j][k]+a[k][i]<ans){//更新答案
31 ans=d[i][j]+a[j][k]+a[k][i];
32 path.clear();
33 path.push_back(i);
34 get_path(i,j);
35 path.push_back(j);
36 path.push_back(k);
37 }
38 for(int i=1;i<=n;i++)//依据每一个k作为中转点更新ij最短路径
39 for(int j=1;j<=n;j++)
40 if(d[i][j]>d[i][k]+d[k][j]){
41 d[i][j]=d[i][k]+d[k][j];
42 pos[i][j]=k;
43 }
44 }
45 if(ans==0x3f3f3f3f){
46 cout<<"No solution.";
47 return 0;
48 }
49 for(int i=0;i<path.size();i++)
50 cout<<path[i]<<" ";
51 }

总结一下:主要是用k作为中转点,对于每一个k:i和j都是小于k的,先更新最小环的答案,然后用此时的k更新每个i,j的最短距离,为下一次循环(也就是k+1)作准备。

方程: min{d[i][j]+a[j][k]+a[k][i]} (1<=i<j<k)。

其中pos[i][j]=k,代表ij最短路间经过了k,用于get_path()。

POJ1734 Sightseeing trip (Floyd求最小环)的更多相关文章

  1. poj1734 Sightseeing trip(Floyd求无向图最小环)

    #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> ...

  2. #10072. 「一本通 3.2 例 1」Sightseeing Trip(floyd求最小环+路径)

    https://loj.ac/problem/10072 针对无向图 因为Floyd是按照结点的顺序更新最短路的,所以我们在更新最短路之前先找到一个连接点k,当前的点k肯定不存在于已存在的最短路f[i ...

  3. 算法复习——floyd求最小环(poj1734)

    题目: 题目描述 N 个景区,任意两个景区之间有一条或多条双向的路来连接,现在 Mr.Zeng 想找一条旅游路线,这个路线从A点出发并且最后回到 A 点,假设经过的路线为 V1,V2,....VK,V ...

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

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

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

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

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

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

  7. 【BZOJ 1027】 (凸包+floyd求最小环)

    [题意] 某公司加工一种由铁.铝.锡组成的合金.他们的工作很简单.首先进口一些铁铝锡合金原材料,不同种类的原材料中铁铝锡的比重不同.然后,将每种原材料取出一定量,经过融解.混合,得到新的合金.新的合金 ...

  8. floyd求最小环 模板

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

  9. CF 1206D - Shortest Cycle Floyd求最小环

    Shortest Cycle 题意 有n(n <= 100000)个数字,两个数字间取&运算结果大于0的话连一条边.问图中的最小环. 思路 可以发现当非0数的个数很大,比如大于200时, ...

随机推荐

  1. 【高并发】通过源码深度分析线程池中Worker线程的执行流程

    大家好,我是冰河~~ 在<高并发之--通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程>一文中我们深度分析了线程池执行任务的核心流程,在ThreadPool ...

  2. 第九天python3 闭包、nonlocal、默认值的作用域

    闭包 自由变量:未在本地作用域中定义的变量,例如定义在内存函数外的外层函数的作用域中的变量: 闭包:出现在嵌套函数中,指的是内层函数引用到了外层函数的自由变量,就形成了闭包: 示例1: # -*- c ...

  3. [RCTF2015]EasySQL-1|SQL注入

    1.打开之后只有登录和注册两个功能,界面如下: 2.随便注册一个账户并进行登录,(注册admin时显示该账户已存在,考虑到是不是要获取到admin账户),发现可以进行改密操作,结果如下: 3.抓取各个 ...

  4. Yii ACF(accessController)简单控权

    use yii\filters\AccessControl; class SiteController extends Controller { public function behaviors() ...

  5. JPA作持久层操作

    JPA(Hibernate是jpa的实现) jpa是对实体类操作,从而通过封装好的接口直接设置数据库的表结构.虽然jpa可以直接通过编写java代码来操作数据库表结构,避免了sql的编写,但别忘了需要 ...

  6. CMAKE编译时如何自动下载第三方库并解压、安装到指定目录

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 导语 在日常开发过程中难免会使用到第三方库或者需要将部分库分离另外存储,如果将库与代码放在一起难免会造成工程庞大,此时就可 ...

  7. 万答#21,如何查看 MySQL 数据库一段时间内的连接情况

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 查看方式 已知至少有两种方式可以实现 1.开启 general_log 就可以观察到 开启命令 mysql> set ...

  8. 万答#19,MySQL可以禁用MyISAM引擎吗?

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. MyISAM的适用场景越来越少了. 随着MySQL 8.0的推出,系统表已经全面采用InnoDB引擎,不再需要MyISAM ...

  9. k8s驱逐篇(2)-kubelet节点压力驱逐

    kubelet节点压力驱逐 kubelet监控集群节点的 CPU.内存.磁盘空间和文件系统的inode 等资源,根据kubelet启动参数中的驱逐策略配置,当这些资源中的一个或者多个达到特定的消耗水平 ...

  10. MySQL编译安装-出现错误提示

    环境: 系统:centos7.6 MySQL:5.6.3 cmake:2.8.6 原因: 安装ncurses-devel运行环境 [root@localhost ~]# yum -y install ...