POJ 3268 Silver Cow Party(最短路&Dijkstra)题解
题意:有n个地点,有m条路,问从所有点走到指定点x再走回去的最短路中的最长路径
思路:用Floyd超时的,这里用的Dijkstra。
Dijkstra感觉和Prim和Kruskal的思路很像啊。我们把所有点分为两个集合:S(和源点在同一集合),T(其余点),用dis数组表示每个点到S的最短距离,vis数组记录这个点是否在S中。我们每次找出在T的一个和S距离最短的点,加到S中,这个距离就是他到源点的最短路径(听说能证,我不会证...),然后更新其他点,直到所有点都在S。
这道题从x走回去很简单,就是单源点最短路,但是从某一点走到x的最短路怎么求?遍历?这里有个很妙的方法,就是转置map,然后我们再求一遍x到每个点的最短路径就行了。
代码:
#include<cstdio>
#include<set>
#include<cmath>
#include<stack>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int maxn = 1000+5;
const int INF = 0x3f3f3f3f;
int mp[maxn][maxn];
int dis[maxn]; //和源点集合最短距离
int vis[maxn]; //1则和源点在同一集合内
int n,m,x;
void dijkstra(){
memset(vis,0,sizeof(vis));
memset(dis,INF,sizeof(dis));
dis[x] = 0; //初始化,到自己距离为0
for(int i = 1;i <= n;i++){
int Min = INF,k = 0;
for(int j = 1;j <= n;j++){
if(!vis[j] && dis[j] < Min){ //找一个和源点集合距离最近的
Min = dis[j];
k = j;
}
}
vis[k] = 1;
for(int j = 1;j <= n;j++){ //更新和源点集合距离
if(dis[j] > dis[k] + mp[k][j]){
dis[j] = dis[k] + mp[k][j];
}
}
}
}
void transpose(){
for(int i = 1;i <= n;i++){
for(int j = 1;j < i;j++){
swap(mp[i][j],mp[j][i]);
}
}
}
int ans[maxn];
int main(){
while(scanf("%d%d%d",&n,&m,&x) != EOF){
memset(mp,INF,sizeof(mp));
for(int i = 0;i < m;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
mp[u][v] = w;
}
dijkstra();
for(int i = 1;i <= n;i++)
ans[i] = dis[i];
transpose();
dijkstra();
for(int i = 1;i <= n;i++)
ans[i] += dis[i];
int Max = 0;
for(int i = 1;i <= n;i++)
Max = max(Max,ans[i]);
printf("%d\n",Max);
}
return 0;
}
POJ 3268 Silver Cow Party(最短路&Dijkstra)题解的更多相关文章
- POJ 3268 Silver Cow Party 最短路—dijkstra算法的优化。
POJ 3268 Silver Cow Party Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbe ...
- poj 3268 Silver Cow Party(最短路dijkstra)
描述: One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the bi ...
- POJ 3268 Silver Cow Party (双向dijkstra)
题目链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total ...
- POJ 3268 Silver Cow Party 最短路
原题链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total ...
- poj 3268 Silver Cow Party (最短路算法的变换使用 【有向图的最短路应用】 )
Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13611 Accepted: 6138 ...
- POJ 3268 Silver Cow Party (最短路径)
POJ 3268 Silver Cow Party (最短路径) Description One cow from each of N farms (1 ≤ N ≤ 1000) convenientl ...
- POJ 3268——Silver Cow Party——————【最短路、Dijkstra、反向建图】
Silver Cow Party Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Su ...
- POJ 3268 Silver Cow Party (最短路dijkstra)
Silver Cow Party 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/D Description One cow fr ...
- DIjkstra(反向边) POJ 3268 Silver Cow Party || POJ 1511 Invitation Cards
题目传送门 1 2 题意:有向图,所有点先走到x点,在从x点返回,问其中最大的某点最短路程 分析:对图正反都跑一次最短路,开两个数组记录x到其余点的距离,这样就能求出来的最短路以及回去的最短路. PO ...
- POJ 3268 Silver Cow Party 单向最短路
Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 22864 Accepted: 1044 ...
随机推荐
- 【Android】保存Bitmap到SD卡
1.打开读写SD卡的权限 需要在AndroidManifest.xml加入如下代码: <uses-permission android:name="android.permission ...
- 从零打造在线网盘系统之Hibernate配置O/R映射
欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...
- pta 习题集5-19 列车厢调度
1 ====== <--移动方向 / 3 ===== \ 2 ====== -->移动方向 大家或许在某些数据结构教材上见到过"列车厢调度问题"(当然没见过也不要紧). ...
- HOJ 1936&POJ 2955 Brackets(区间DP)
Brackets My Tags (Edit) Source : Stanford ACM Programming Contest 2004 Time limit : 1 sec Memory lim ...
- Android之上下文context
Context,中文直译为“上下文”,SDK中对其说明如下: 1.它描述的是一个应用程序环境的信息,即上下文. 2.该类是一个抽象(abstract class)类,Android提供了该抽象类的具体 ...
- pandas 从txt读取DataFrame&DataFrame格式化保存到txt
前提 首先保证你txt里的文本内容是有规律可循的(例如,列与列之间通过“\t”.“,”等指定的可识别分隔符分隔): 例如我需要读取的数据,(\t)分隔: (此文件内容是直接以DataFrame格式化写 ...
- kubernetes实战(八):k8s集群安全机制RBAC
1.基本概念 RBAC(Role-Based Access Control,基于角色的访问控制)在k8s v1.5中引入,在v1.6版本时升级为Beta版本,并成为kubeadm安装方式下的默认选项, ...
- remote git server
EControl5.0ssh://mygit@192.168.6.70/ISRL/SPDH/EControl.gitPTSssh://mygit@192.168.6.70/ISRL/ISaints/p ...
- 简单的共享文件http
如果你急需一个简单的Web Server,但你又不想去下载并安装那些复杂的HTTP服务程序,比如:Apache,ISS等.那么, Python 可能帮助你.使用Python可以完成一个简单的内建 HT ...
- C# 反双曲余弦函数
反双曲余弦函数的定义是: T1 = Math.Log(t + Math.Sqrt(t * t - 1)); 1. 叉乘(cross product),也叫向量的外积.向量积.顾名思义,求下来的结果是一 ...