zoukankan      html  css  js  c++  java
  • SRM 615 DIV1 500

    TC 都615了。。。时间过的真快啊。

    第一次做出500分,心情还是很激动的,虽然看了很久的题解,TC官网上的题解,很详细,但是英语的...我搜了搜,发现一份日语的...好吧,我还是看看英语的吧...

    这题算法就是二维spfa啊,很容易看出,存在一个环mod,那么D+x*mod = T 这样话,就合法了。就可以用dis[d][u] u表示点,距离 模mod 为d,这样跑一下spfa,只要dis[T%mod][n-1] <= T(小于T的,可以补mod) 说明合法了。 

    开始看题解的时候 比较纠结mod怎么取的。。。其实随便取一个mod就行,mod只是为了压缩而已。。

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <string>
     5 #include <vector>
     6 #include <queue>
     7 using namespace std;
     8 #define LL long long
     9 LL dis[20001][51];
    10 int in[20001][51];
    11 class LongLongTripDiv1
    12 {
    13     public :
    14     string isAble(int N, vector <int> A, vector <int> B, vector <int> D, long long T)
    15     {
    16         int u,v,d,mod,i;
    17         mod = -1;
    18         for(i = 0;i < A.size();i ++)
    19         {
    20             if(A[i] == 0||B[i] == 0)
    21             mod = D[i];
    22         }
    23         if(mod == -1)
    24         return "Impossible";
    25         mod = mod*2;
    26         memset(dis,0x7f,sizeof(dis));
    27         queue< pair<int,int> > que;
    28         que.push(make_pair(0,0));
    29         dis[0][0] = 0;
    30         in[0][0] = 1;
    31         while(!que.empty())
    32         {
    33             pair<int,int> s = que.front();
    34             d = s.first;
    35             u = s.second;
    36             in[d][u] = 0;
    37             que.pop();
    38             for(i = 0;i < A.size();i ++)
    39             {
    40                 if(u == A[i])
    41                 v = B[i];
    42                 else if(u == B[i])
    43                 v = A[i];
    44                 else continue;
    45                 LL temp;
    46                 temp = D[i] + dis[d][u];
    47                 if(temp < dis[temp%mod][v])
    48                 {
    49                     dis[temp%mod][v] = temp;
    50                     if(!in[temp%mod][v])
    51                     {
    52                         in[temp%mod][v] = 1;
    53                         que.push(make_pair(temp%mod,v));
    54                     }
    55                 }
    56             }
    57         }
    58         return dis[T%mod][N-1] <= T ? "Possible":"Impossible";
    59     }
    60 };
  • 相关阅读:
    CDH 6.0.1 集群搭建 「Process」
    CDH 6.0.1 集群搭建 「Before install」
    利用 Docker 搭建单机的 Cloudera CDH 以及使用实践
    vue2.x学习笔记(十七)
    vue2.x学习笔记(十六)
    vue2.x学习笔记(十五)
    vue2.x学习笔记(十四)
    vue2.x学习笔记(十三)
    vue2.x学习笔记(十二)
    vue2.x学习笔记(十一)
  • 原文地址:https://www.cnblogs.com/naix-x/p/3661864.html
Copyright © 2011-2022 走看看