poj 3268 最短路
***题意:在x这个点有个聚会,其他的点要到x这个点,然后再会自己原始的点,求一来一回最大的那个距离
做法:两边dijstra算法,因为是单向图,要注意更新顺序***
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<algorithm> using namespace std;
#define N 1010
#define INF 0x3f3f3f3f int maps[N][N];
int n, m, x;
int dist1[N], dist2[N], vis[N]; void Init()
{
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
maps[i][j]=i==j ? 0 : INF;
} void dij()
{
for(int i=1; i<=n; i++)
dist1[i]=maps[i][x]; memset(vis, 0, sizeof(vis));
vis[x]=1;
for(int i=1; i<=n; i++)
{
int Min=INF, index=-1;
for(int j=1; j<=n; j++)
{
if(!vis[j]&&dist1[j]<Min)
{
Min=dist1[j];
index=j;
}
}
if(index==-1) break;
vis[index]=1;
for(int j=1; j<=n; j++)
{
if(!vis[j]&&dist1[j]>maps[j][index]+dist1[index])
dist1[j]=maps[j][index]+dist1[index];
}
}
for(int i=1; i<=n; i++)
dist2[i]=maps[x][i]; memset(vis, 0, sizeof(vis));
vis[x]=1;
for(int i=1; i<=n; i++)
{
int Min=INF, index=-1;
for(int j=1; j<=n; j++)
{
if(!vis[j]&&dist2[j]<Min)
{
Min=dist2[j];
index=j;
}
}
if(index==-1) break;
vis[index]=1;
for(int j=1; j<=n; j++)
{
if(!vis[j]&&dist2[j]>dist2[index]+maps[index][j])
dist2[j]=dist2[index]+maps[index][j];
}
}
} int main()
{
while(~scanf("%d%d%d", &n, &m, &x))
{
Init();
int u, v, len;
for(int i=1; i<=m; i++)
{
scanf("%d%d%d", &u, &v, &len);
maps[u][v]=min(len, maps[u][v]);
}
dij(); int ans=-1; for(int i=1; i<=n; i++)
{
if(dist1[i]+dist2[i]>ans)
ans=dist1[i]+dist2[i];
}
printf("%d\n", ans);
}
return 0;
}
***两遍spfa,第二次的spfa要使用开始建的反向图,建的反向图也就是以x为如点,dist1里存就是其他店到x的距离***
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<algorithm> using namespace std;
#define N 101000
#define INF 0x3f3f3f3f int n, m, x;
int dist[N], head[N], dist1[N], head1[N], vis[N], k, k1; struct node
{
int v, len, next;
} a[N], b[N]; void add(int u, int v, int len)
{
a[k].v=v;
a[k].len=len;
a[k].next=head[u];
head[u]=k++;
} void add1(int u, int v, int len)
{
b[k1].v=v;
b[k1].len=len;
b[k1].next=head1[u];
head1[u]=k1++;
} int spfa()
{
queue<int> q;
q.push(x);
dist[x]=0;
vis[x]=1; while(!q.empty())
{
int t=q.front();
q.pop();
vis[t]=0;
for(int i=head[t]; i!=-1; i=a[i].next)
{
int v=a[i].v;
if(dist[v]>dist[t]+a[i].len)
{
dist[v]=dist[t]+a[i].len;
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
}
memset(vis, 0, sizeof(vis));
queue<int> Q;
Q.push(x);
dist1[x]=0;
vis[x]=1; while(!Q.empty())
{
int t=Q.front();
Q.pop();
vis[t]=0;
for(int i=head1[t]; i!=-1; i=b[i].next)
{
int v=b[i].v;
if(dist1[v]>dist1[t]+b[i].len)
{
dist1[v]=dist1[t]+b[i].len;
if(!vis[v])
{
vis[v]=1;
Q.push(v);
}
}
}
}
int ans=-1;
for(int i=1; i<=n; i++)
{
if(ans<dist[i]+dist1[i]&&dist[i]!=INF&&dist1[i]!=INF)
ans=dist[i]+dist1[i];
}
return ans;
} int main()
{
int u, v, len;
while(~scanf("%d%d%d", &n, &m, &x))
{
memset(dist, INF, sizeof(dist));
memset(dist1, INF, sizeof(dist1));
memset(head, -1, sizeof(head));
memset(head1, -1, sizeof(head1));
memset(vis, 0, sizeof(vis));
k=k1=1;
for(int i=1; i<=m; i++)
{
scanf("%d%d%d", &u, &v, &len);
add(u, v, len);
add1(v, u, len);
}
int ans=spfa(); printf("%d\n", ans);
}
return 0;
}
poj 3268 最短路的更多相关文章
- poj 3268 最短路dijkstra *
题目大意:给出n个点和m条边,接着是m条边,代表从牛a到牛b需要花费c时间,现在所有牛要到牛x那里去参加聚会,并且所有牛参加聚会后还要回来,给你牛x,除了牛x之外的牛,他们都有一个参加聚会并且回来的最 ...
- POJ 3268 最短路应用
POJ3268 题意很简单 正向图跑一遍SPFA 反向图再跑一边SPFA 找最大值即可. #include<iostream> #include<cstdio> #includ ...
- 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算法的优化。
POJ 3268 Silver Cow Party Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbe ...
- DIjkstra(反向边) POJ 3268 Silver Cow Party || POJ 1511 Invitation Cards
题目传送门 1 2 题意:有向图,所有点先走到x点,在从x点返回,问其中最大的某点最短路程 分析:对图正反都跑一次最短路,开两个数组记录x到其余点的距离,这样就能求出来的最短路以及回去的最短路. PO ...
- POJ 3268 Silver Cow Party (最短路径)
POJ 3268 Silver Cow Party (最短路径) Description One cow from each of N farms (1 ≤ N ≤ 1000) convenientl ...
- Heavy Transportation POJ 1797 最短路变形
Heavy Transportation POJ 1797 最短路变形 题意 原题链接 题意大体就是说在一个地图上,有n个城市,编号从1 2 3 ... n,m条路,每条路都有相应的承重能力,然后让你 ...
- 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 (求给定两点之间的最短路)
http://poj.org/problem?id=3268 每头牛都要去标号为X的农场参加一个party,农场总共有N个(标号为1-n),总共有M单向路联通,每头牛参加完party之后需要返回自己的 ...
- poj 3268 Silver Cow Party(最短路,正反两次,这个模版好)
题目 Dijkstra,正反两次最短路,求两次和最大的. #define _CRT_SECURE_NO_WARNINGS //这是找出最短路加最短路中最长的来回程 //也就是正反两次最短路相加找最大的 ...
随机推荐
- [CF1830F] The Third Grace
题目描述 You are given $ n $ intervals and $ m $ points on the number line. The $ i $ -th intervals cove ...
- 加速计算,为何会成为 AI 时代的计算力“新宠” 审核中
随着科技的发展,处理大量数据和进行复杂计算的需求越来越高,人工智能.大数据和物联网等领域更是如此,传统的计算方式已经无法满足这些需求.因此,加速计算作为一种现代计算方式,成了必要的手段.加速计算具有前 ...
- 【内核】kernel 热升级-1:kexec 机制
内核热升级是指,预先准备好需要升级的内核镜像文件,在秒级时间内,完成内核切换,追求用户服务进程无感知. 欧拉操作系统提供了一套比较成熟的解决方案,该解决方案提供了用户态程序和内核态程序两部分: kex ...
- ASR项目实战-前处理
本文深入探讨前处理环节. 首先介绍一些基本的名词,比如 文件名后缀 文件格式 音频格式 采样率和位深 预备知识 文件名后缀.文件格式和音频格式 常见的音频文件,比如.wav..mp3..m4a..wm ...
- 从零玩转第三方登录之WeChat公众号扫码关注登陆 -wechatgzh
title: 从零玩转第三方登录之WeChat公众号扫码关注登陆 date: 2022-09-27 22:46:53.362 updated: 2023-03-30 13:28:41.359 url: ...
- 【云原生 | Kubernetes 系列】— Kubernetes存储方案
目录 [云原生 | Kubernetes 系列]- Kubernetes存储方案 一.基本存储 EmptyDir HostPath NFS 搭建nfs服务器 二.高级存储 PV和PVC pv pvc ...
- 玩转Python:数据可视化,一个很高级的交互式Python库,附代码
在数据科学和分析的世界里,将数据可视化是至关重要的一步,它能帮助我们更好地理解数据,发现潜在的模式和关系.Python 提供了多种可视化工具,HvPlot 是其中一个出色的库,专为简单且高效的交互式可 ...
- 通过 KernelUtil 截取 QQ / TIM 客户端 ClientKey 详细教程
前言 众所周知,由于最新版本 QQ 9.7.20 已经不能通过模拟网页快捷登录来截取 Clientkey,估计是针对访问的程序做了限制,然而经过多方面测试,诸多的地区.环境.机器也针对这种获取方法做了 ...
- libGDX游戏开发之Box2D碰撞(十五)
libGDX游戏开发之Box2D(十四) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和goo ...
- vue-admin-template动态菜单后台获取菜单
vue-admin-template.vue-element-admin配置动态菜单,菜单数据从后台获取. 我在网上search了几个小时也没有找到想要的emm,翻官网也没有说明,只说明了路由覆盖.只 ...