1. 程式人生 > >POJ--3268 Silver Cow Party(最短路)

POJ--3268 Silver Cow Party(最短路)

iostream {} push prior namespace sca author sil main

題目電波:POJ--3268 Silver Cow Party

跑兩遍 dijkstra 就好了 弱智題

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
#define maxn 10001
#define inf 0x3f3f3f
#define pii pair<int,int>
struct ac{
  int to,va;
  ac(){}
  ac(
int a,int b){ to=a,va=b; } }; vector<ac>q[maxn],w[maxn]; int dis[maxn],dist[maxn]; bool fa[maxn]; void dijkstra(int s){ memset(fa,0,sizeof(fa)); memset(dis,inf,sizeof(dis)); priority_queue<pii,vector<pii>,greater<pii> >pq; dis[s]=0; pq.push(pii(dis[s],s));
while(!pq.empty()){ int u=pq.top().second; pq.pop(); // cout<<"1"<<endl; if(fa[u]) continue; fa[u]=1; for(int j=0;j<q[u].size();j++){ ac x=q[u][j]; int v=x.to,va=x.va; if(dis[v]>dis[u]+va){ dis[v]=dis[u]+va; pq.push(pii(dis[v],v)); } } } }
void dijkstra1(int s){ memset(fa,0,sizeof(fa)); memset(dist,inf,sizeof(dist)); priority_queue<pii,vector<pii>,greater<pii> >pq; dist[s]=0; pq.push(pii(dist[s],s)); while(!pq.empty()){ //cout<<"2"<<endl; int u=pq.top().second; pq.pop(); if(fa[u]) continue; fa[u]=1; for(int j=0;j<w[u].size();j++){ ac x=w[u][j]; int v=x.to,va=x.va; if(dist[v]>dist[u]+va){ dist[v]=dist[u]+va; pq.push(pii(dist[v],v)); } } } } int main(){ int n,m,s; cin>>n>>m>>s; for(int j=0;j<m;j++){ int u,v,va; scanf("%d%d%d",&u,&v,&va); q[u].push_back(ac(v,va)); w[v].push_back(ac(u,va)); } dijkstra(s); dijkstra1(s); int ans=0; for(int j=1;j<=n;j++){ if(j==s) continue; ans=max(dis[j]+dist[j],ans); //cout<<dis[j]<<" "<<dist[j]<<endl; } cout<<ans<<endl; }

POJ--3268 Silver Cow Party(最短路)