zoukankan      html  css  js  c++  java
  • 1018_Public Bike Management(30分)[DFS]

    原题:https://pintia.cn/problem-sets/994805342720868352/problems/994805489282433024

    第一次的失败代码:

     1 #include<iostream>
     2 #include<vector>
     3 #include<cstdio>
     4 #include<cstdlib>
     5 #include<cstring>
     6 using namespace std;
     7 
     8 const int maxLen = 500 + 10;
     9 int  send, back, res_step, bike[maxLen], road[maxLen][maxLen];
    10 int Cmax, N, Sp, M, x, y, t, half, flag;
    11 bool  vis[maxLen][maxLen];
    12 vector<int> path, temp_path;
    13 
    14 void dfs(int s,int sum,int step) {
    15     if (Sp == s) {
    16         if (step > res_step) return;
    17         int send1 = sum >= half - bike[Sp] ? 0 : half - bike[Sp] - sum;
    18         int back1 = send1 > 0 ? 0 : sum - (half - bike[Sp]);
    19         if (step < res_step) {
    20             send = send1;
    21             back = back1;
    22             res_step = step;
    23             path = temp_path;
    24         }
    25         else if (step == res_step) {
    26             if (send1 > send || (send1 == send && back1 > back)) return;
    27             send = send1;
    28             back = back1;
    29             path = temp_path;
    30         }
    31         return;
    32     }
    33     for (int i = 1;i<=N;i++) {
    34         if (vis[s][i] == false && road[s][i] != -1) {
    35             vis[s][i] = vis[i][s] = true;
    36             temp_path.push_back(i);
    37             int ds = bike[i] > half ? bike[i] - half : 0;
    38             dfs(i, sum + ds, step + road[s][i]);
    39             temp_path.pop_back();
    40             vis[s][i] = vis[i][s] = false;
    41         }
    42     }
    43 }
    44 
    45 int main()
    46 {
    47     while (cin >> Cmax >> N >> Sp >> M) {
    48         memset(bike, 0, sizeof(bike));
    49         memset(road, -1, sizeof(road));
    50         memset(vis, 0, sizeof(vis));
    51         for (int i = 1; i <= N; i++) scanf("%d", &bike[i]);
    52         for (int i = 0; i < M; i++) {
    53             scanf("%d %d %d", &x, &y, &t);
    54             road[x][y] = road[y][x] = t;
    55         }
    56         half = Cmax / 2; vis[0][0] = true;
    57         send = res_step = back = 0x7fffffff;
    58         temp_path.push_back(0);
    59         flag = bike[Sp] >= half ? 1 : 0;
    60         dfs(0, 0, 0);
    61         cout << send << " ";
    62         for (int i = 0; i < path.size(); i++) {
    63             printf("%d", path[i]);
    64             if (i != path.size() - 1) printf("->");
    65             else printf(" ");
    66         }
    67         if (flag) printf("%d
    ", bike[Sp] - half);
    68         else printf("%d
    ", back);
    69     }
    70     return 0;
    71 }

    p

  • 相关阅读:
    Vue部署到nginx刷新后出现404页面的问题
    移动端rem布局方案
    Vue使用Mint-ui的Popup, Picker组件报错问题
    Vue稍微高级一点的选项卡—动态组件
    GMOJ 1283排列统计 题解
    GMOJ 1281旅行 题解
    Why Did the Cow Cross the Road I P 题解
    【USACO 2017 December Gold】A Pie for a Pie 题解
    2020.05.23【NOIP提高组】模拟 总结
    2020.05.03【NOIP提高组】模拟 总结
  • 原文地址:https://www.cnblogs.com/NiBosS/p/12087977.html
Copyright © 2011-2022 走看看