zoukankan      html  css  js  c++  java
  • The Preliminary Contest for ICPC Asia Nanjing 2019 H. Holy Grail

    题目链接:https://nanti.jisuanke.com/t/41305

    题目说的很明白。。。只需要反向跑spfa然后输入-dis,然后添-dis的一条边就好了。。。


      1 #include <iostream>
      2 #include <cstdio>
      3 #include <cstring>
      4 #include <algorithm>
      5 #include <queue>
      6 #include <map>
      7 #include <cmath>
      8 #include <iomanip>
      9 using namespace std;
     10 
     11 typedef long long LL;
     12 #define inf 1e14
     13 #define rep(i, j, k) for (int i = (j); i <= (k); i++)
     14 #define rep__(i, j, k) for (int i = (j); i < (k); i++)
     15 #define per(i, j, k) for (int i = (j); i >= (k); i--)
     16 #define per__(i, j, k) for (int i = (j); i > (k); i--)
     17 
     18 const int N = 310;
     19 int head[N];
     20 int cnt;
     21 bool vis[N];
     22 LL dis[N];
     23 queue<int > que;
     24 int n,m;
     25 
     26 struct Edge{
     27     int to;
     28     LL w;
     29     int next;
     30 }e[510];
     31 
     32 void add(int u,int v,LL w){
     33     e[cnt].to = v;
     34     e[cnt].w = w;
     35     e[cnt].next = head[u];
     36     head[u] = cnt++;
     37 }
     38 
     39 void spfa(int s){
     40 
     41     while(!que.empty()) que.pop();
     42     rep__(i,0,n){
     43         vis[i] = false;
     44         dis[i] = inf;
     45     }
     46 
     47     dis[s] = 0;
     48     que.push(s);
     49 
     50     int u,v;
     51     LL w;
     52     while(!que.empty()){
     53         u = que.front();
     54  //       cout << "u " << u << endl;
     55         que.pop();
     56         vis[u] = false;
     57         for(int o = head[u]; ~o; o = e[o].next){
     58             v = e[o].to;
     59             w = e[o].w;
     60             if(dis[v] > dis[u] + w){
     61                 dis[v] = dis[u] + w;
     62                 if(!vis[v]){
     63                     vis[v] = true;
     64                     que.push(v);
     65                 }
     66             }
     67         }
     68     }
     69 }
     70 
     71 int main(){
     72 
     73     int T;
     74     scanf("%d",&T);
     75 
     76     int u,v;
     77     LL w;
     78     rep(o,1,T){
     79         scanf("%d%d",&n,&m);
     80 
     81         rep__(i,0,n) head[i] = -1;
     82         cnt = 0;
     83 
     84         rep(i,1,m){
     85             scanf("%d%d%lld",&u,&v,&w);
     86             add(u,v,w);
     87         }
     88 
     89         // rep__(i,o,n){
     90         //     cout << " u " << i << endl;
     91 
     92         //     for(int  o = head[i]; ~o; o = e[o].next){
     93         //         cout << e[o].to << " " << e[o].w << endl;
     94         //     }
     95         // }
     96 
     97         rep(i,1,6){
     98             scanf("%d%d",&u,&v);
     99             spfa(v);
    100             printf("%lld
    ",-dis[u]);
    101             add(u,v,-dis[u]);
    102         }
    103     }
    104 
    105     getchar();getchar();
    106     return 0;
    107 }
  • 相关阅读:
    我们毕业了!!!@全体成员
    华东交通大学编译原理期末试卷
    软件设计师中级下午答题解题策略分析~
    Java实现旅行商最短距离
    基于SSH的医院在线挂号
    基于Java的模拟写字板的设计与实现
    基于java的雷电游戏
    基于Java的飞机大战游戏的设计与实现
    基于Java的超级玛丽游戏的设计与实现
    基于Javaee的影视创作论坛的设计与实现
  • 原文地址:https://www.cnblogs.com/SSummerZzz/p/11468418.html
Copyright © 2011-2022 走看看