学习了一下用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. display: table-cell里面文字打点的方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Odoo14 一些好用的开源的模块

    # odoo14中一些好用的开源的模块 1.intero_reload_form 刷新按钮(页面数据刷新,而不是按F5刷新整个页面) 2.ms_magic_button 弹框下拉选项 3.sessio ...

  3. 云原生Devops 的实现方法

    DevOps 是一个持续改善软件产品的过程,它通过极短的发布周期.全面自动化的集成和交付流水线,以及团队间的紧密协作来不断改善产品.DevOps 的目标是缩短将创意变成用户可以使用的产品的时间,并降低 ...

  4. 解决ASP.NET Core在Task中使用IServiceProvider的问题

    前言 问题的起因是在帮同事解决遇到的一个问题,他的本意是在EF Core中为了解决避免多个线程使用同一个DbContext实例的问题.但是由于对Microsoft.Extensions.Depende ...

  5. 优雅退出在Golang中的实现

    背景 为什么需要优雅关停 在Linux下运行我们的go程序,通常有这样2种方式: 前台启动.打开终端,在终端中直接启动某个进程,此时终端被阻塞,按CTRL+C退出程序,可以输入其他命令,关闭终端后程序 ...

  6. 金秋十月 - Apache DolphinScheduler 收获 2 位新 Committer

    点击上方蓝字关注 Apache DolphinScheduler Apache DolphinScheduler(incubating),简称"DS", 中文名 "海豚调 ...

  7. Tomcat报错:类XXXServlet不是Servlet 解决方法

    学习servlet 结果对应网页打不开,报错 HTTP状态 500 - 内部服务器错误 类型 异常报告 消息 类HelloServlet不是Servlet ... 根本原因. java.lang.Cl ...

  8. Spring源码 20 手写模拟源码

    参考源 https://www.bilibili.com/video/BV1tR4y1F75R?spm_id_from=333.337.search-card.all.click https://ww ...

  9. iommu分析之---intel irq remap框架实现

    背景介绍: IRQ域层级结构: 在某些架构上,可能有多个中断控制器参与将一个中断从设备传送到目标CPU. 让我们来看看x86平台上典型的中断传递路径吧 Device --> IOAPIC -&g ...

  10. [开源内卷] .NET 定时任务 -- FreeScheduler 支持 cron、持久化、可变定时设置

    前言 卷了,卷了,卷了,最近太卷...这篇文章写了好几天了,由于同类型文章太多,排期到今天发布.实在不想卷,得罪了!各位定时任务开源大佬们! .NET 定时组件生态实在太强大了,写下此文只希望能供大家 ...