Submission #261191

#TimeUsernameProblemLanguageResultExecution timeMemory
261191amoo_safarTreatment Project (JOI20_treatment)C++17
35 / 100
3069 ms3832 KiB
// Zende bad Shoma nasime faghat ! #include <bits/stdc++.h> #define pb push_back #define F first #define S second #define all(x) x.begin(), x.end() #define debug(x) cerr << #x << " : " << x << '\n' using namespace std; typedef long long ll; typedef long double ld; typedef string str; typedef pair<ll, ll> pll; const ll Mod = 1000000007LL; const int N = 2e5 + 10; const ll Inf = 2242545357980376863LL; const ll Log = 30; int n, m; int T[N], L[N], R[N], C[N], mk[N]; ll dis[N]; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for(int i = 1; i <= m; i++) cin >> T[i] >> L[i] >> R[i] >> C[i]; ll ans = Inf; memset(dis, 31, sizeof dis); for(int i = 1; i <= m; i++){ if(L[i] == 1) dis[i] = C[i]; } while(true){ ll mn = Inf, idx = -1; for(int i = 1; i <= m; i++){ if(mk[i]) continue; if(dis[i] < mn){ mn = dis[i]; idx = i; } } if(idx == -1) break; mk[idx] = 1; if(R[idx] == n) ans = min(ans, dis[idx]); for(int j = 1; j <= m; j++){ //if(L[j] > R[idx] + 1) continue; if(mk[j]) continue; if(T[j] <= T[idx]){ if(L[j] + (T[idx] - T[j]) <= R[idx] + 1) dis[j] = min(dis[j], dis[idx] + C[j]); } if(T[j] > T[idx]){ if(R[idx] - (T[j] - T[idx]) >= L[j] - 1) dis[j] = min(dis[j], dis[idx] + C[j]); } } } if(ans >= Inf) return cout << "-1\n", 0; cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...