一个最小环裸题。最小环的两种求法dijkstra和Floyd直接参见这里我就是从这里学的,不想写了。

注意这里最重要的一个点是利用了Floyd的dp过程中路径上点不超过$k$这一性质,来枚举环上最大编号并枚举连边,这样另外枚举的两个点的最短路肯定不会经过和$k$连的边。

坑点:

  • 平常inf都开0x3f3f3f3f,这题没注意,在求环那里如果三个inf一加,就爆掉了。。所以要改小一点。这个问题值得重视。
  • Floyd正常输出路径应该就更新的时候记录中间点,最后直接递归输出。但是这里因为记录路径中$x$和$y$间的最短路必须是不经过当时的大于等于$k$的点的,所以最小环答案更新即记路径,不能到最后用Floyd转移数组输出路径。
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<cmath>
  6. #define dbg(x) cerr << #x << " = " << x <<endl
  7. using namespace std;
  8. typedef long long ll;
  9. typedef double db;
  10. typedef pair<int,int> pii;
  11. template<typename T>inline T _min(T A,T B){return A<B?A:B;}
  12. template<typename T>inline T _max(T A,T B){return A>B?A:B;}
  13. template<typename T>inline char MIN(T&A,T B){return A>B?(A=B,):;}
  14. template<typename T>inline char MAX(T&A,T B){return A<B?(A=B,):;}
  15. template<typename T>inline void _swap(T&A,T&B){A^=B^=A^=B;}
  16. template<typename T>inline T read(T&x){
  17. x=;int f=;char c;while(!isdigit(c=getchar()))if(c=='-')f=;
  18. while(isdigit(c))x=x*+(c&),c=getchar();return f?x=-x:x;
  19. }
  20. const int N=+,INF=0x0f0f0f0f;
  21. int mp[N][N],dis[N][N],g[N][N],h[N][N],n,m,ans=INF,pt1,pt2,pt3;
  22. void print(int i,int j){
  23. if(!h[i][j]){printf("%d ",i);return;}
  24. print(i,h[i][j]);
  25. print(h[i][j],j);
  26. }
  27. void path(int i,int j){
  28. h[i][j]=g[i][j];
  29. if(!g[i][j])return;
  30. path(i,g[i][j]),path(g[i][j],j);
  31. }
  32.  
  33. int main(){//freopen("test.in","r",stdin);//freopen("test.ans","w",stdout);
  34. memset(mp,0x0f,sizeof mp),memset(dis,0x0f,sizeof dis);
  35. read(n),read(m);
  36. for(register int i=,x,y,z;i<=m;++i)read(x),read(y),read(z),dis[x][y]=dis[y][x]=mp[y][x]=mp[x][y]=_min(mp[x][y],z);
  37. for(register int i=;i<=n;++i)dis[i][i]=mp[i][i]=;
  38. for(register int k=;k<=n;++k){
  39. for(register int i=;i<k;++i)
  40. for(register int j=i+;j<k;++j)
  41. if(MIN(ans,mp[i][k]+mp[j][k]+dis[i][j]))
  42. pt1=i,pt2=j,pt3=k,path(i,j);//dbg(i),dbg(j),dbg(k);
  43. for(register int i=;i<=n;++i)
  44. for(register int j=;j<=n;++j)
  45. if(MIN(dis[i][j],dis[i][k]+dis[k][j]))
  46. g[i][j]=k;
  47. }
  48. if(ans<INF)print(pt1,pt2),printf("%d %d\n",pt2,pt3);
  49. else puts("No solution.");
  50. return ;
  51. }

poj1734 Sightseeing trip[最小环]的更多相关文章

  1. poj1734 Sightseeing trip【最小环】

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:8588   Accepted:3224   ...

  2. POJ1734 Sightseeing trip (Floyd求最小环)

    学习了一下用Floyd求最小环,思路还是比较清晰的. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring ...

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

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

  4. POJ1734 - Sightseeing trip

    DescriptionThere is a travel agency in Adelton town on Zanzibar island. It has decided to offer its ...

  5. 「POJ1734」Sightseeing trip

    「POJ1734」Sightseeing trip 传送门 这题就是要我们求一个最小环并且按顺序输出一组解. 考虑 \(O(n^3)\) 地用 \(\text{Floyd}\) 求最小环: 考虑 \( ...

  6. 「LOJ#10072」「一本通 3.2 例 1」Sightseeing Trip(无向图最小环问题)(Floyd

    题目描述 原题来自:CEOI 1999 给定一张无向图,求图中一个至少包含 333 个点的环,环上的节点不重复,并且环上的边的长度之和最小.该问题称为无向图的最小环问题.在本题中,你需要输出最小环的方 ...

  7. 【poj1734】Sightseeing trip

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8520   Accepted: 3200 ...

  8. URAL 1004 Sightseeing Trip(最小环)

    Sightseeing Trip Time limit: 0.5 secondMemory limit: 64 MB There is a travel agency in Adelton town ...

  9. poj 1734 Sightseeing trip判断最短长度的环

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5590   Accepted: 2151 ...

随机推荐

  1. flex 遇上white-space:nowrap的2种解决方法

    需求:使用flex布局,超出部分想使用点点点显示 一.方法1使用min-width:0 效果: HTML代码如下: <div class="team-body"> &l ...

  2. mapreducer计算原理

    mapreducer计算原理

  3. 论文阅读及复现 | Improved Semantic Representations From Tree-Structured Long Short-Term Memory Networks

    两种形式的LSTM变体 Child-Sum Tree-LSTMs N-ary Tree-LSTMs https://paperswithcode.com/paper/improved-semantic ...

  4. P2709 小B的询问 【普通莫队】

    这是我的莫队入门题,我也了解到了莫队分为普通莫队以及带修莫队.顾名思义,普通莫队不需要修改区间的值,而带修莫队处理区间的值会修改的查询. 能用莫队的前提条件: 1.在知道 [l, r]中信息时,可以在 ...

  5. PYTHON 100days学习笔记001:初识python

    现在学习这个确实时间很紧,但是迟早得学,以后PYTHON自动化运维,PYTHON自动测试都需要用的到,甚至可以往数据分析方向发展,刚好最近有数据观组织的python100天计划,就参加了,做好笔记,一 ...

  6. Mac下安装SecureCRT客户端并激活

    1. 先下载SecureCRT和破解文件 默认下载到了当前用户的”下载”目录中 2. 在”Finder”中 打开 “scrt-7.3.0-657.osx_x64.dmg” 并将 SecureCRT复制 ...

  7. java分词工具hanlp介绍

    前几天(6月28日),在第23届中国国际软件博览会上,hanlp这款自然语言处理工具荣获了“2019年第二十三届中国国际软件博览会优秀产品”. HanLP是由一系列模型预算法组成的工具包,结合深度神经 ...

  8. 查找担保圈-step6-对被包含过的组进行清理,只保留未被包含过的组

    USE [test] GO /****** Object: StoredProcedure [dbo].[p04_get_groupno_cleared] Script Date: 2019/7/8 ...

  9. dubbo分布式服务框架-study1

    本文参考“如何给老婆解释RPC”一文进行的... 1.首先了解下dubbo: dubbo是一款高性能.轻量级的开源java RPC服务框架(RPC即远程过程调用,具体解释见:https://www.j ...

  10. Codeforces 1236A. Stones

    传送门 注意到两种操作都要消耗中间的石头,并且两种操作每次都会得到 $3$ 个石头 那么显然优先做操作二是最优的,因为操作二只会消耗中间堆的一个石头 如果有剩下再进行操作 $1$ ,那么可以保证总操作 ...