zoukankan      html  css  js  c++  java
  • The 2019 Asia Nanchang First Round Online Programming Contest B. Fire-Fighting Hero

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

    题意:有一个灭火英雄,和一个灭火团队,一个人与一个团队比较。

    灭火英雄到其他灭火点的最短路最大值,与一个团队到其他灭火点的最短路的最大距离*C,进行比较。

    如果一个团队的一个人在k点,那么k点的最短路就是0,这样,我们可以构建一个虚拟点“0”点,跑团队的最短路

    可以让“0”点到其他团队队员点为0,到其他点为inf,然后跑一次最短路就可以了,下面的代码是比赛时候的,懒得改,直接很难看的写了。


      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 1e9
     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 = 1100;
     16 bool vis[N];
     17 int mp[N][N];
     18 bool fired[N];
     19 int team[N];
     20 int dis[N];
     21 int V,E,S,K,C;
     22 
     23 int dijkstra(int s){
     24 
     25     rep(i,1,V) vis[i] = false;
     26 
     27     if(s){
     28         rep(i,1,V) dis[i] = inf;
     29         rep(i,1,V) dis[i] = mp[s][i];
     30         vis[s] = true;
     31 
     32         rep(i,2,V){//团队的
     33 
     34             int x = -1;
     35             int c = inf;
     36 
     37             rep(j,1,V){
     38                 
     39                 if(!vis[j] && c > dis[j]) x = j, c = dis[j];
     40             }
     41             if(x == -1) continue;
     42 
     43             vis[x] = true;
     44             rep(p,1,V){
     45                 if(!vis[p] && dis[x] + mp[x][p] < dis[p]){
     46                     dis[p] = dis[x] + mp[x][p];
     47                 }
     48             }
     49 
     50         } 
     51     }
     52     else{//英雄的
     53         rep(i,1,V) dis[i] = inf;
     54         rep(i,1,K) dis[team[i]] = 0;
     55         vis[s] = true;
     56 
     57         rep(i,1,V){
     58 
     59             int x = -1;
     60             int c = inf;
     61 
     62             rep(j,1,V){
     63                 
     64                 if(!vis[j] && c > dis[j]) x = j, c = dis[j];
     65             }
     66             if(x == -1) continue;
     67 
     68             vis[x] = true;
     69             rep(p,1,V){
     70                 if(!vis[p] && dis[x] + mp[x][p] < dis[p]){
     71                     dis[p] = dis[x] + mp[x][p];
     72                 }
     73             }
     74 
     75         } 
     76     }
     77 
     78 
     79     int ans = 0;
     80     rep(i,1,V){
     81         
     82         if(dis[i] == inf) continue;
     83         if(fired[i]) ans = max(ans,dis[i]);
     84     }
     85 
     86     return ans;
     87 }
     88 
     89 int main(){
     90 
     91     ios::sync_with_stdio(false);
     92     cin.tie(0);
     93 
     94     int T;
     95     cin >> T;
     96 
     97     int p = 0;
     98     int q = 0;
     99     while(T--){
    100         cin >> V >> E >> S >> K >> C;
    101         
    102         rep(i,1,V) rep(j,1,V){
    103             if(i == j) mp[i][j] = 0;
    104             else mp[i][j] = inf;
    105         }
    106 
    107         rep(i,1,K){
    108             cin >> team[i];
    109         }
    110 
    111         int u,v,w;
    112 
    113         rep(i,1,E){
    114             cin >> u >> v >> w;
    115             fired[v] = true;
    116             if(mp[u][v] > w){
    117                 mp[u][v] = mp[v][u] = w;
    118             }
    119         }
    120 
    121         p = dijkstra(S);//英雄
    122     
    123         q = dijkstra(0);//团队
    124 
    125         if(p <= q*C) cout << p << endl;
    126         else cout << q << endl;
    127     }
    128 
    129     getchar();getchar();
    130 
    131     return 0;
    132 }
  • 相关阅读:
    动态显隐jgGrid的列,改变列名
    从数据库获取bit类型判断的时候要注意大小写
    jqGrid自定义列的用法
    ERP中Ajax的使用
    给DataGrid或Repeater加载树状结构
    jqGrid显示树形结构
    使用json异步获取数据提交表单
    封装jQuery图表插件
    java 多线程 day10 获取线程的返回值 CallableAndFuture
    java 多线程 day09 线程池
  • 原文地址:https://www.cnblogs.com/SSummerZzz/p/11512251.html
Copyright © 2011-2022 走看看