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 };

 

posted @ 2014-04-13 09:56  Naix_x  阅读(207)  评论(0编辑  收藏  举报