POJ--3268--Silver Cow Party【SPFA+邻接表】
来源:互联网 发布:淘宝内裤买家秀男露丁 编辑:程序博客网 时间:2024/06/05 04:41
题意:一些牛要去某一点参加聚会,然后再回到自己家,路是单向的,问花费时间最多的那头牛最少需要花费多长时间。
思路:从聚会地点返回,相当于是从某一点到其他各个点的最短路径。从牛的家中走到聚会地点,可以把路径反过来变成从聚会地点到各个点的最短路径,两个最短路径值加起来就是每头牛所花费的最小时间,找出最大的即可。
我用了两个邻接表存路径,其实这道题用邻接矩阵存更好做,矩阵横纵坐标翻转就把路径反转了,我用SPFA写想练练手,一直都不会手写SPFA,做几道题找找感觉。
AC居然用时0MS。。
#include<cstring>#include<string>#include<fstream>#include<iostream>#include<iomanip>#include<cstdio>#include<cctype>#include<algorithm>#include<queue>#include<map>#include<set>#include<vector>#include<stack>#include<ctime>#include<cstdlib>#include<functional>#include<cmath>using namespace std;#define PI acos(-1.0)#define MAXN 100100#define eps 1e-7#define INF 0x7FFFFFFF#define seed 131#define ll long long#define ull unsigned ll#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1struct node{ int u,v,next;}edge[MAXN],redge[MAXN];int head[MAXN],rhead[MAXN],dist[MAXN],vis[MAXN],ans[MAXN];int cnt,rcnt,n,m,x;void add_edge(int a,int b,int c){ edge[cnt].u = b; edge[cnt].v = c; edge[cnt].next = head[a]; head[a] = cnt++; redge[rcnt].u = a; redge[rcnt].v = c; redge[rcnt].next = rhead[b]; rhead[b] = rcnt++;}void spfa(int type){ int i,j; for(i=1;i<=n;i++){ dist[i] = INF; } dist[x] = 0; memset(vis,0,sizeof(vis)); vis[x] = 1; queue<int>q; q.push(x); while(!q.empty()){ int temp = q.front(); q.pop(); vis[temp] = 0; for(i=type?rhead[temp]:head[temp];i!=-1;i=type?redge[i].next:edge[i].next){ int lu = type?redge[i].v:edge[i].v; if(lu+dist[temp]<dist[type?redge[i].u:edge[i].u]){ dist[type?redge[i].u:edge[i].u] = lu + dist[temp]; if(!vis[type?redge[i].u:edge[i].u]){ vis[type?redge[i].u:edge[i].u] = 1; q.push(type?redge[i].u:edge[i].u); } } } }}int main(){ int i,j,a,b,c; scanf("%d%d%d",&n,&m,&x); memset(head,-1,sizeof(head)); memset(rhead,-1,sizeof(rhead)); cnt = rcnt = 0; int maxm = 0; for(i=0;i<m;i++){ scanf("%d%d%d",&a,&b,&c); add_edge(a,b,c); } spfa(0); for(i=1;i<=n;i++){ if(i!=x) ans[i] = dist[i]; } spfa(1); for(i=1;i<=n;i++){ if(i!=x) ans[i] += dist[i]; if(ans[i]>maxm) maxm = ans[i]; } printf("%d\n",maxm); return 0;}
0 0
- POJ--3268--Silver Cow Party【SPFA+邻接表】
- SPFA POJ 3268 Silver Cow Party
- poj 3268 Silver Cow Party , spfa , dijkstra
- POJ 3268 Silver Cow Party(SPFA)
- poj 3268 Silver Cow Party (spfa )
- Silver Cow Party - POJ 3268 spfa
- poj 3268 Silver Cow Party(SPFA)
- Poj 3268 Silver Cow Party【SPFA】
- POJ 3268 Silver Cow Party(Spfa)
- poj 3268 Silver Cow Party Dijkstra 和SPFA
- poj 3268 Silver Cow Party(最短路+SPFA)
- POJ 3268 Silver Cow Party (来回最短路 SPFA)
- poj 3268 Silver Cow Party(dijkstra||SPFA)(中等)
- Silver Cow Party poj 3268 Dijkstra,spfa,+vector
- POJ-3268-Silver Cow Party(SPFA 反向建图)
- POJ-3268 Silver Cow Party(最短路spfa算法)
- POJ 3268 Silver Cow Party 【单项图,双向spfa】
- poj 3628 Silver Cow Party (spfa)
- Android与WebView的同步和异步访问机制
- 数据结构学习笔记:顺序栈与链栈
- SVN命令
- 旋转数组的最小数字
- ——java动态代理及AOP
- POJ--3268--Silver Cow Party【SPFA+邻接表】
- MFC 文件与文件夹相关操作
- POJ 1564 Sum It Up
- Android NFC近场通信02----读写卡的准备工作
- jQuery代码优化:事件委托
- socket 异常
- 算法设计学习:顺序表算法
- int float double 最大值,最小值
- 乩似纲兔笛胰痔霉慰暮兔