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 ...
随机推荐
- python 10分钟入门pandas
本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook .习惯 ...
- sprintf函数详解
转摘声明:选自<CSDN 社区电子杂志——C/C++杂志> 在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望.由于sprintf 跟printf 在用法上几乎一样 ...
- checkbox的name与JavaBean的交互时发现的一个现象
一个页面: <form action="reg.jsp" method="post"> <ul> <li>算法选择</ ...
- kitkat-s5p4418drone 记录
查看帮助: ./device/nexell/tools/build.sh -h 编译u-boot: ./device/nexell/tools/build.sh -b drone2 -t u ...
- java 颁发公钥 私钥 php js RSA 加密解密整合
PHP rsa密钥生成 加密解密 - PHP开发 - CSDN博客 https://blog.csdn.net/duzhenxun/article/details/8879227 <?php c ...
- Rancher OS
Rancher OS 是生产规模中运行 Docker 最小,最简单的方式.RancherOS 的所有东西都作为 Docker 管理的容器.这些系统服务包括 udev 和 rsyslog.Rancher ...
- 解决 Ubuntu 下 Sublime Text 无法输入中文的问题
解决 Ubuntu 下 Sublime Text 无法输入中文的问题 1. 安装依赖库 sudo apt-get install build-essential sudo apt-get instal ...
- Java 算法-快速幂
1 什么是快速幂? 快速幂,顾名思义就是快速的求次幂,例如:a^b,普通的算法就是累乘,这样的计算方法的时间复杂度就是O(n),而快速幂的方法使得次幂的计算方法的时间复杂度降低到O(logn). 假 ...
- 【css a标签 鼠标悬浮时变手型】
<a href="#" style="cursor:pointer">
- mysql 约束条件 auto_increment 自动增长目录
mysql 约束条件 auto_increment 自动增长 mysql 约束条件 auto_increment 自动增长起始值 布长 起始偏移量 mysql 约束条件 auto_increment ...