zoukankan      html  css  js  c++  java
  • kuangbin专题专题四 Silver Cow Party POJ

     

    题目链接:https://vjudge.net/problem/POJ-3268

    题意:点X处开办排队,其他点的牛到X点去参加派对,然后从X点回到各自的点,通路是单向的,所有牛都要走最短路,

    求出所有牛走的最短路中最长的那条路。

    (直接看代码吧,就是一处改一下,别的和dijkstra板子差不多)


      1 #include <iostream>
      2 #include <cstring>
      3 #include <algorithm>
      4 #include <cstdio>
      5 #include <string>
      6 using namespace std;
      7  
      8 typedef long long LL;
      9 #define inf (1LL << 30) - 1
     10 #define rep(i,j,k) for(int i = (j); i <= (k); i++)
     11 #define rep__(i,j,k) for(int i = (j); i < (k); i++)
     12 #define per(i,j,k) for(int i = (j); i >= (k); i--)
     13 #define per__(i,j,k) for(int i = (j); i > (k); i--)
     14 
     15 const int N = 1010;
     16 int G[N][N];
     17 bool vis[N];
     18 int dis1[N];
     19 int dis2[N];
     20 int u,v,w;
     21 int n,m,X;
     22 
     23 void init(){
     24 
     25     rep(i,1,n) vis[i] = false;
     26     rep(i,1,n) rep(j,1,n){
     27         if(i == j) G[i][j] = 0;
     28         else G[i][j] = inf;
     29     }
     30 }
     31 
     32 void input(){
     33 
     34     rep(i,1,m){
     35         cin >> u >> v >> w;
     36         if(G[u][v] > w) G[u][v] = w;
     37     }
     38 }
     39 
     40 void dijkstra(){
     41 
     42 //////////////////////////////////////////////////////////
     43     //(1)第一部分
     44     rep(i,1,n) dis1[i] = G[i][X]; //dis[]存的是其他城市到X点的最短距离
     45     vis[X] = true;
     46 
     47     rep(i,2,n){
     48 
     49         int x = -1;
     50         int w = inf;
     51 
     52         rep(j,1,n){
     53             if(!vis[j] && w > dis1[j]) w = dis1[x = j];
     54         }
     55         if(x == -1) continue;
     56 
     57         vis[x] = true;
     58         rep(k,1,n){
     59             //如果k点到X点的距离 大于  k点到x点的距离加上x到X点的距离  那么更新dis[]数组
     60             if(!vis[k] && dis1[k] > dis1[x] + G[k][x]){
     61                 dis1[k] = dis1[x] + G[k][x];
     62             }
     63         }
     64     }
     65 
     66  //   rep(i,1,n) cout << dis1[i] << endl;
     67 
     68 ////////////////////////////////////////////////////////////
     69     //(2)第二部分  就是一模一样的dijkstra板子
     70     rep(i,1,n) vis[i] = false;
     71     rep(i,1,n) dis2[i] = G[X][i];
     72     vis[X] = true;
     73 
     74     rep(i,2,n){
     75         int x = -1;
     76         int w = inf;
     77 
     78         rep(j,1,n){
     79             if(!vis[j] && w > dis2[j]) w = dis2[x = j];
     80         }
     81 
     82         if(x == -1) continue;
     83 
     84         vis[x] = true; 
     85         rep(k,1,n){
     86             if(!vis[k] && dis2[k] > dis2[x] + G[x][k]){
     87                 dis2[k] = dis2[x] + G[x][k];
     88             }
     89         }
     90     }
     91     int ans = 0;
     92 
     93     //把来回的路线加起来,选出最长的那个来回,就是答案
     94     rep(i,1,n) if(i != X) ans = max(ans, dis1[i]+ dis2[i]);
     95 
     96     cout << ans << endl;
     97 }
     98 
     99 int main(){
    100  
    101     ios::sync_with_stdio(false);
    102     cin.tie(0);
    103 
    104     cin >> n >> m >> X;
    105 
    106     init();
    107     input();
    108     dijkstra();
    109 
    110     getchar();getchar();
    111     return 0;
    112 }
  • 相关阅读:
    Missing Ranges
    springboot整合quartz
    Quartz01
    springboot整合jap
    springboot集成redis
    springboot整合drui、mybatis、pagehelper
    springboot模板
    SpringBoot入门
    Java注解简介
    Git02(ssh key的配置和使用、idea配置并使用Git)
  • 原文地址:https://www.cnblogs.com/SSummerZzz/p/11204358.html
Copyright © 2011-2022 走看看