POJ 3268 Silver Cow Party
来源:互联网 发布:索尼55-210mm镜头知乎 编辑:程序博客网 时间:2024/04/30 08:27
求来回最短路加起来最长的一条。
两次SPFA,然后选某个点的来回最长。(有向图)
Dijkstra+邻接矩阵 比较方便建立 反向图。
我用SPFA+2个邻接表(正图+反图),C++ 32ms。
#include<cstdio>#include<cstring>#include<string>#include<queue>#include<algorithm>#include<queue>#include<map>#include<stack>#include<iostream>#include<list>#include<set>#include<cmath>#define INF 0x7fffffff#define eps 1e-6using namespace std;int n,m,start;struct lx{ int v,t;};vector<lx>g1[1001];vector<lx>g2[1001];int dis1[1001];int dis2[1001];void SPFA(int *dis,vector<lx>g[]){ bool vis[1001]; queue<int>q; for(int i=1;i<=n;i++) dis[i]=INF,vis[i]=0; vis[start]=1,dis[start]=0; q.push(start); while(!q.empty()) { int u=q.front();q.pop(); vis[u]=0; for(int j=0;j<g[u].size();j++) { int v=g[u][j].v; int t=g[u][j].t; if(dis[v]>dis[u]+t) { dis[v]=dis[u]+t; if(!vis[v]) { vis[v]=1; q.push(v); } } } }}int main(){ while(scanf("%d%d%d",&n,&m,&start)!=EOF) { for(int i=1;i<=n;i++) g1[i].clear(),g2[i].clear(); while(m--) { int u,v,t; scanf("%d%d%d",&u,&v,&t); lx now; now.v=v,now.t=t; g1[u].push_back(now); now.v=u; g2[v].push_back(now); } SPFA(dis1,g1); SPFA(dis2,g2); int ans=0; for(int i=1;i<=n;i++) ans=max(ans,dis1[i]+dis2[i]); printf("%d\n",ans); }}
0 0
- poj 3268 Silver Cow Party
- POJ 3268 Silver Cow Party
- poj 3268 Silver Cow Party
- POJ 3268 Silver Cow Party
- POJ 3268 Silver Cow Party
- POJ-3268-Silver Cow Party
- poj 3268 Silver Cow Party
- poj 3268 Silver Cow Party
- POJ-3268-Silver Cow Party
- poj 3268--Silver Cow Party
- POJ 3268 Silver Cow Party
- POJ 3268 Silver Cow Party
- POJ 3268 Silver Cow Party
- POJ 3268 Silver Cow Party
- POJ-3268 Silver Cow Party
- poj 3268 Silver Cow Party
- poj 3268 Silver Cow Party
- poj 3268 Silver Cow Party
- HTML基本语法
- 何时使用 成员操作符.与箭头操作符->
- 堆和栈的区别
- uva 10539 - Almost Prime Numbers(数论)
- 伪分布和完全分布搭建步骤
- POJ 3268 Silver Cow Party
- HDU 2896 病毒侵袭
- 面向对象经典例子理解
- HelloWorld
- MIUI patchrom拉取zip包出错的解决记录
- Nginx中的正则表达式
- Linux qt环境变量设置
- ext 客户端分页
- ubuntu查看apt-get里面都提供了哪些软件