POJ 3268 Silver Cow Party(最短路 dijkstra求任意两点最短路)
2015-08-22 12:23
267 查看
题意:奶牛派对:有分别来自 N 个农场的 N 头牛去农场 X 嗨皮,农场间由 M 条有向路径连接。每头牛来回都挑最短的路走,求它们走的路的最大长度?奶牛派对:有分别来自 N 个农场的 N 头牛去农场 X 嗨皮,农场间由 M 条有向路径连接。每头牛来回都挑最短的路走,求它们走的路的最大长度?
开始思路,就是求某个点到x加上x到这某个点距离最大,直接floyed,1000数据果然TLE,dijkstra只能求一点到多点的最短路,这里开始多只奶牛到x的最短路,就不会了。。。太弱 看别人题解,发现dijkstra 修改一下 也可以求多点到一点最短路。
方法:最短路径只需要从x到i的最短路径代表他们返回的最短路径,然后将所有边反过来,再从i到x的最短路径代表他们来参加聚会的最短路径,这样对应相加找出一个最大值就可以了,当然其实不需要将所有边反过来,只需要将map的行和列对换一下就可以了。
floyed TLE
两次dijkstra。
开始思路,就是求某个点到x加上x到这某个点距离最大,直接floyed,1000数据果然TLE,dijkstra只能求一点到多点的最短路,这里开始多只奶牛到x的最短路,就不会了。。。太弱 看别人题解,发现dijkstra 修改一下 也可以求多点到一点最短路。
方法:最短路径只需要从x到i的最短路径代表他们返回的最短路径,然后将所有边反过来,再从i到x的最短路径代表他们来参加聚会的最短路径,这样对应相加找出一个最大值就可以了,当然其实不需要将所有边反过来,只需要将map的行和列对换一下就可以了。
floyed TLE
[code]这里写代码片
两次dijkstra。
[code]#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int M[1010][1010],d1[1010],d2[1010],visit[1010],n,m,x; void dijkstra(int *d) { memset(visit,0,sizeof(visit)); visit[x]=1; for(int i=1;i<=n;i++) d[i]=M[x][i]; for(int i=2;i<=n;i++) { int index,minn=99999999; for(int j=1;j<=n;j++) { if(!visit[j]&&d[j]<minn) { index=j; minn=d[j]; } } visit[index]=1; for(int j=1;j<=n;j++) { if(!visit[j]&&d[j]>d[index]+M[index][j]) d[j]=d[index]+M[index][j]; } } } int main() { while(~scanf("%d %d %d",&n,&m,&x)) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i==j) M[i][j]=0; else M[i][j]=99999999; for(int i=1;i<=m;i++) { int a,b,c; scanf("%d %d %d",&a,&b,&c); M[a][b]=c; } dijkstra(d1); for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) swap(M[i][j],M[j][i]); dijkstra(d2); int maxx=-1; for(int i=1;i<=n;i++) maxx=max(maxx,d1[i]+d2[i]); printf("%d\n",maxx); } }
相关文章推荐
- LightOJ1104---Birthday Paradox (概率)
- 如何使用UDP进行跨网段广播(转)
- 多台web服务器之间共享session
- [8-20]时间管理命令Date、Hwclock、Cal小结
- STM32的NVIC_PriorityGroupConfig使用及优先级分组方式理解
- 第3期Spark纯实战公益大讲坛:通过案例实战掌握Spark内核运行内幕
- 去掉rhel的注册提示
- HBASE bulkload 加载TSV数据
- http://stormzhang.com/devtools/2014/12/09/android-studio-tutorial3/ 安卓studio 安装教程
- 微信支付公众平台配置
- 栈的应用2——超级计算器(中缀与后缀表达式)C语言
- AsyncTask小案例
- POJ2667 Hotel(线段树区间合并)
- 基于MDK编程STM32程序无法使用,硬件仿真在汇编窗口看到停留在“0x0800XXXX BEAB BKPT 0xAB //进入调试模式”
- Selection使用简介
- 爬虫Larbin解析(一)——Larbin配置与使用
- 2014扬声器的信息中国建筑师大会
- 第 4 章 Android 应用的调试
- pat(B)1009. 说反话(逆迭代器)
- MySQL 主键与索引的联系与区别分析