POJ3268-Silver Cow Party-(Dijstra)
2024-09-07 01:20:17
题意:有n只牛聚会,每只牛的家有编号,指定去一只牛家里聚会。牛很懒,走最短路去,花费时间最少。而回来的时间又不相同,问那只走最远的牛走了多久?
解题:去某只牛家里聚会,单源求最短路,来回时间不同,用有向边表示。颠倒一下每条边,则可以得到 去和回 两次最短路,暴力求最大时间。
//记录模板
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#include<map>
#include<queue>
#include<stack>
#include<set>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std; int n,m,s;
int d[],d1[],d2[];
int a[][];
bool vis[]; void Dijkstra()
{
memset(vis,false,sizeof(vis));
memset(d,inf,sizeof(d));
d[s]=;
while(true)
{
int v=-;
for(int u=;u<=n;u++)
{
if( !vis[u] && ( v==- || d[u]<d[v] ) )
v=u;
} if(v==-)
break;
vis[v]=true; for(int u=;u<=n;u++)
d[u]=min(d[u],d[v]+a[v][u]);
}
} int main()
{
while(scanf("%d%d%d",&n,&m,&s)!=EOF)
{
memset(a,inf,sizeof(a));
for(int i=;i<=n;i++)
a[i][i]=; for(int i=;i<=m;i++)
{
int x,y,z;
scanf("%d %d %d",&x,&y,&z);
a[x][y]=min(a[x][y],z);
} Dijkstra(); for(int i=;i<=n;i++)///第一次的结果 传给d1
d1[i]=d[i]; ///置换矩阵
for(int i=;i<=n;i++)
for(int j=;j<i;j++)///下三角矩阵转换即可
swap(a[i][j],a[j][i]); Dijkstra();///从s到各点最短路 即 返回的最短路 int maxx=-inf;
for(int i=;i<=n;i++)
maxx=max(maxx,d1[i]+d[i]);
printf("%d\n",maxx);
}
return ;
}
Dijkstra模板
最新文章
- php5.1以上版本时间戳_时间戳与日期格式转换_相差8小时 的解决方案
- bug_ _fragment的1
- leetcode 题解:Binary Tree Level Order Traversal (二叉树的层序遍历)
- ab安装和使用
- iOS开发之性能优化
- 【.NET特供-第三季】ASP.NET MVC系列:MVC与三层图形对照
- GridView 编辑,更新,删除 等操作~~
- php的命名空间层级与目录层级是一致的吗?
- (简单) ZOJ 3209 Treasure Map , DLX+精确覆盖。
- linux—粘滞位的设置
- Java面向对象 String 基本数据类型对象包装类
- 无向图 解决Unity地图上固定网络上,标记走固定步数能到达的位置
- 通过java递归思想实现以树形方式展现出该目录中的所有子目录和文件
- octave基本指令3
- uWSGI和WSGI区别
- laravel目录结构
- java中使HttpDelete可以发送body信息
- Oracle时间的加减
- OSGiBundle出现 Could not find bundle: org.eclipse.equinox.console的解决方案
- P2471 [SCOI2007]降雨量