POJ 3268 Silver Cow Party 正反单源最短路
2016-04-02 13:34
501 查看
题目 求哪个到点X的距离和X到这个点的距离之和最小。
1.点X到个点距离最小:即普通最短路,起点为X,终点为其余个点。
2.各点到X的距离最小:X为终点,其余个点为起点。如果图是无向图,情况2和情况1是一样的,在无向图中终点起点交换有什么关系呢。
但是本题是有向图,其实也很简单,只需要把各边的方向调换一下,把X当起点,用情况1的方法求,得出的答案就是最后的答案。(可以在纸上画一下,正确性显而易见)
最后枚举一下哪个距离和最大就可以了。
吐槽一下:我看题目写了花费Ti (1 ≤ Ti ≤
100),于是把minc设为101.结果wa了两次,难道是我瞎了?!
这题写完最短路先告一段落,还有Dijstra优化版本没做,单源bellman_ford、spfa,多源最短路flyod没做。。。。
1.点X到个点距离最小:即普通最短路,起点为X,终点为其余个点。
2.各点到X的距离最小:X为终点,其余个点为起点。如果图是无向图,情况2和情况1是一样的,在无向图中终点起点交换有什么关系呢。
但是本题是有向图,其实也很简单,只需要把各边的方向调换一下,把X当起点,用情况1的方法求,得出的答案就是最后的答案。(可以在纸上画一下,正确性显而易见)
最后枚举一下哪个距离和最大就可以了。
吐槽一下:我看题目写了花费Ti (1 ≤ Ti ≤
100),于是把minc设为101.结果wa了两次,难道是我瞎了?!
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int mp[1005][1005],vis[1005],lowc1[1005],lowc2[1005]; int m,n,x; void Dijstra1(int beg) //去的花费 { for(int i=1;i<=n;i++) { vis[i]=0; lowc1[i]=mp[i][beg]; } lowc1[beg]=0; for(int j=1;j<=n;j++) { int minc=10000000,p=-1; for(int i=1;i<=n;i++) if(!vis[i] && lowc1[i]<minc) { minc=lowc1[i]; p=i; } vis[p]=1; for(int i=1;i<=n;i++) if(!vis[i] && lowc1[i]>lowc1[p]+mp[i][p]) lowc1[i]=lowc1[p]+mp[i][p]; } } void Dijstra2(int beg) //回来的花费 { for(int i=1;i<=n;i++) { vis[i]=0; lowc2[i]=mp[beg][i]; } lowc2[beg]=0; for(int j=1;j<=n;j++) { int minc=10000000,p=-1; for(int i=1;i<=n;i++) if(!vis[i] && lowc2[i]<minc) { minc=lowc2[i]; p=i; } vis[p]=1; for(int i=1;i<=n;i++) if(!vis[i] && lowc2[i]>lowc2[p]+mp[p][i]) lowc2[i]=lowc2[p]+mp[p][i]; } } int main() { int u,v,w; while(~scanf("%d%d%d",&n,&m,&x)) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) mp[i][j]=10000000; for(int i=0;i<m;i++) { scanf("%d%d%d",&u,&v,&w); if(mp[u][v]>w) mp[u][v]=w; } Dijstra1(x); Dijstra2(x); int ans=-1; for(int i=1;i<=n;i++) //printf("%d %d\n",lowc1[i],lowc2[i]); ans=max(ans,lowc1[i]+lowc2[i]); printf("%d\n",ans); } return 0; }
这题写完最短路先告一段落,还有Dijstra优化版本没做,单源bellman_ford、spfa,多源最短路flyod没做。。。。
相关文章推荐
- 哪些网站适合用于充电、学习新知识
- Android仿淘宝订单页面实现
- 第五周进度条
- HDU 2013 蟠桃记
- 字节排序函数
- DFS-部分和问题
- echo命令解析
- Android HTTP请求方式:HttpClient
- 【Qt】Qstring
- 深入理解Objective-C:Category(上)
- 数据结构实验之排序三:bucket sort
- MFC-通过WtsApi32.dll中的函数枚举进程
- MNIST数据集规则化
- 逻辑数据库设计 - 单纯的树(递归关系数据)
- Android studio下载依赖时提示连接超时time out的解决方法
- while循环
- Delphi 高效读写锁
- Android-->MediaMuxer,MediaCodec,AudioRecord及Camera实现音频视频混合MP4文件
- ACM刷题之HDU————找新朋友
- Python下的Mysql模块MySQLdb安装详解