zoukankan      html  css  js  c++  java
  • [kuangbin带你飞]专题四 最短路练习 POJ 3268 Silver Cow Party

    题意:

    在一个有向图中求n头牛从自己的起点走到x再从x走回来的最远距离

    思路一开始是暴力跑dij……

    讲道理不太可能……

    然后就百度了一下 才知道把矩阵转置的话就只需要求两次x的单源最短路……

     1 /* ***********************************************
     2 Author        :Sun Yuefeng
     3 Created Time  :2016/10/22 20:09:36
     4 File Name     :A.cpp
     5 ************************************************ */
     6 
     7 #include<cstdio>
     8 #include<iostream>
     9 #include<algorithm>
    10 #include<cmath>
    11 #include<cstring>
    12 #include<string>
    13 #include<bitset>
    14 #include<map>
    15 #include<set>
    16 #include<stack>
    17 #include<vector>
    18 #include<queue>
    19 #include<list>
    20 #define M(a,b) memset(a,b,sizeof(a))
    21 using namespace std;
    22 typedef long long ll;
    23 const int inf=0x3f3f3f3f;
    24 const int maxn=1e3+10;
    25 const int mod=1e7+7;
    26 int dx[8]= {0,0,1,-1,1,-1,1,-1};
    27 int dy[8]= {1,-1,0,0,-1,1,1,-1};
    28 
    29 int n,m,x,most;
    30 int waycome[maxn][maxn];
    31 int wayback[maxn][maxn];
    32 int dist[maxn];
    33 bool vis[maxn];
    34 
    35 void dijkstra(int x,int way[][maxn]){
    36     int dis[maxn];
    37     for(int i=1;i<=n;i++){
    38         dis[i]=inf;
    39         vis[i]=false;
    40     }
    41     dis[x]=0;
    42     for(int i=1;i<=n;i++){
    43         int k=-1;
    44         int min=inf;
    45         for(int j=1;j<=n;j++){
    46             if(!vis[j]&&dis[j]<min){
    47                 min=dis[j];
    48                 k=j;
    49             }
    50         }
    51         vis[k]=true;
    52         for(int j=1;j<=n;j++){
    53             if(dis[j]>dis[k]+way[k][j]&&!vis[j])
    54                 dis[j]=dis[k]+way[k][j];
    55         }
    56     }
    57     for(int i=1;i<=n;i++){
    58         dist[i]+=dis[i];
    59         if(dist[i]>most) most=dist[i];
    60     }
    61 }
    62 
    63 int main()
    64 {
    65     //freopen("in.txt","r",stdin);
    66     //freopen("out.txt","w",stdout);
    67     while(scanf("%d%d%d",&n,&m,&x)!=EOF){
    68         M(waycome,inf);
    69         M(wayback,inf);
    70         M(dist,0);
    71         int u,v,w;
    72         most=-1;
    73         for(int i=0;i<m;i++){
    74             scanf("%d%d%d",&u,&v,&w);
    75             waycome[u][v]=w;
    76             wayback[v][u]=w;
    77         }
    78         dijkstra(x,waycome);
    79         dijkstra(x,wayback);
    80         printf("%d
    ",most);
    81     }
    82     return 0;
    83 }
  • 相关阅读:
    深入理解javascript原型和闭包(10)——this
    深入理解javascript原型和闭包(9)——简述【执行上下文】下
    深入理解javascript原型和闭包(8)——简述【执行上下文】上
    深入理解javascript原型和闭包(7)——原型的灵活性
    golang 处理 json 结构体
    git push 时用户的配置
    vscod如何自定义 python虚拟环境
    Python实现图片的base64编码
    解决vscode中golang插件依赖安装失败问题
    (转)vscode实现markdown流程图
  • 原文地址:https://www.cnblogs.com/general10/p/5988406.html
Copyright © 2011-2022 走看看