zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    [ZZ]asp.net页面生命周期
    [ZZ]关于内存中栈和堆的区别
    我的第一个ASP.NET网页
    服务应用之WEB与WCF使用之见
    WEB服务于WCF服务的技术资料
    常用的Web服务和WCF服务
    笔试面试,几个字解决(原创)
    beij~~~
    Symbian 逐步深入(三)
    More 平台
  • 原文地址:https://www.cnblogs.com/Dvelpro/p/9827684.html
Copyright © 2011-2022 走看看