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 //这是找出最短路加最短路中最长的来回程 //也就是正反两次最短路相加找最大的 ...
随机推荐
- idea的maven
在我学习springMvc时一直报一个错,后来发现是maven一直出错导致的 这个maven是idea系统自己的maven,用着用着发现依赖项不见了,怎么导入坐标都导不进去,导致在创建maven项目时 ...
- Windows系统激活工具HK
下载:https://wwsi.lanzoum.com/iyUNn10e7foh 密码:g05d GitHub开源 .无毒 原文链接:https://github.com/zbezj/HEU_KMS_ ...
- java通过url得到文件对象(支持http和https)
文字标题:java通过url得到文件对象(支持http和https) 作者:锅巴 1.场景:通过一个url地址来得到一个文件,此方式就是通过一个url将文件下载到本地的临时文件,直接上代码 /** * ...
- Kernel Memory 入门系列:Semantic Kernel 插件
Kernel Memory 入门系列:Semantic Kernel 插件 Kernel Memory 本身提供了完整的RAG能力,这部分能力如果通过Semantic Kernel Memory的话, ...
- ESXi6.7物理机安装之网卡驱动封装Realtek PCIe GBE Family Controller =瑞昱r8168网卡驱动
https://blog.whsir.com/post-3423.html "我这里先提供一个ESXI6.5封装好的r8168网卡驱动ESXI6.5u2.iso,如果你的网卡也是这个,可以直 ...
- Unix 文件权限位
简介 在 Unix 或者类 Unix 文件系统中,每个文件(或者目录,目录也被视为文件)都有自己的所属对象和一个与之相关的 Unix 用户组关联,可以通过设置对应的文件的权限标记指定对于所属用户.所属 ...
- CPU高速缓存与极性代码设计
摘要:CPU内置少量的高速缓存的重要性不言而喻,在体积.成本.效率等因素下产生了当今用到的计算机的存储结构. 介绍 cpu缓存的结构 缓存的存取与一致 代码设计的考量 最后 CPU频率太快,其处理速度 ...
- presto是如何保证作业内存不会发生冲突和溢出
摘要:presto计算引擎作为一个纯内存计算引擎,是如何保证计算过程不会发生作业内存溢出的?本篇文章会进行深入的学习和分析. 本文分享自华为云社区<presto是如何保证作业内存不会发生冲突和溢 ...
- 云小课|CDN第5课 CDN入门之—我的网站可以用CDN加速吗?
摘要:CDN(Content Delivery Network,内容分发网络)通过将源站资源缓存到遍布各地的边缘节点服务器上,用户可以就近获取资源,从而达到加速的效果. 本文分享自华为云社区<[ ...
- 解析WeNet云端推理部署代码
摘要:WeNet是一款开源端到端ASR工具包,它与ESPnet等开源语音项目相比,最大的优势在于提供了从训练到部署的一整套工具链,使ASR服务的工业落地更加简单. 本文分享自华为云社区<WeNe ...