Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define ll long long int
- #define ld long double
- #define pi pair<int,int>
- #define all(x) x.begin(), x.end()
- #define allr(x) x.rbegin(), x.rend()
- #define sz(x) ((int)x.size())
- #define ln(x) ((int)x.length())
- #define mp make_pair
- #define pb push_back
- #define ff first
- #define ss second
- #define endl '\n'
- #define dbg(x) cout << #x << ": " << x << endl
- #define clr(x,v) memset(x, v, sizeof(x))
- #define dblout(x) cout << setprecision(x) << fixed;
- #define FASTIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
- using namespace std;
- const double eps = 1e-9;
- const double PI = acos(-1.0);
- const ll mod = 1e9 + 7;
- const int MAXN = 1e4 + 5;
- const ll inf = INT_MAX;
- vector<vector<pi>> adj;
- bool hotel_at[MAXN], vis[MAXN][605];
- int n;
- ll dp[MAXN][605];
- ll dfs(int u, int travel)
- {
- // Destination
- if(u == n)
- return 0;
- // Visited state
- if(vis[u][travel])
- return dp[u][travel];
- vis[u][travel] = 1;
- ll &ans = dp[u][travel];
- ans = inf;
- for(auto nx : adj[u])
- {
- int v = nx.ff, w = nx.ss;
- // if hotel at u, try sleeping at the hotel and increase the day
- if(hotel_at[u])
- ans = min(ans, 1 + dfs(v, 600 - w));
- // try to go directly without resting
- if(travel >= w)
- ans = min(ans, dfs(v, travel - w));
- }
- return ans;
- }
- void cp()
- {
- int h, m;
- while(cin >> n && n)
- {
- adj.clear();
- adj.resize(n + 1);
- fill(hotel_at, hotel_at + n + 1, 0);
- cin >> h;
- for(int i = 0, x; i < h; i++)
- cin >> x, hotel_at[x] = 1;
- cin >> m;
- for(int i = 0, u, v, w; i < m; i++)
- cin >> u >> v >> w, adj[u].pb({v, w}), adj[v].pb({u, w});
- // Clear DP and vis
- for(int i = 0; i <= n; i++)
- for(int j = 0; j <= 600; j++)
- dp[i][j] = vis[i][j] = 0;
- ll ans = dfs(1, 600);
- cout << (ans < inf ? ans : -1) << endl;
- }
- }
- int main()
- {
- FASTIO;
- int t;
- t = 1;
- // cin >> t;
- while(t--)
- {
- cp();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment