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

题目电波: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;
}

猜你喜欢

转载自www.cnblogs.com/DyLoder/p/9827684.html