제출 #367445

#제출 시각아이디문제언어결과실행 시간메모리
367445alextodoranRestore Array (RMI19_restore)C++17
100 / 100
95 ms1132 KiB
/** ____ ____ ____ ____ ____ ||a |||t |||o |||d |||o || ||__|||__|||__|||__|||__|| |/__\|/__\|/__\|/__\|/__\| **/ #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N_MAX = 5002; const int M_MAX = 10002; int n, m; struct Edge { int u; int len; }; vector <Edge> edges[N_MAX]; void addMinDiff (int u, int v, int d) { edges[u].push_back(Edge{v, -d}); } void addMaxDiff (int u, int v, int d) { edges[v].push_back(Edge{u, d}); } int dist[N_MAX]; queue <int> q; int times[N_MAX]; bool inq[N_MAX]; bool BellmanFord () { for(int i = 0; i <= n; i++) dist[i] = INT_MAX; dist[0] = 0; inq[0] = true; q.push(0); while(q.empty() == false) { int u = q.front(); q.pop(); inq[u] = false; for(Edge &e : edges[u]) if(dist[u] + e.len < dist[e.u]) { dist[e.u] = dist[u] + e.len; if(dist[e.u] < 0) return false; if(inq[e.u] == false) { q.push(e.u); inq[e.u] = true; } } } return true; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m; for(int i = 1; i <= n; i++) { addMinDiff(i, i - 1, 0); addMaxDiff(i, i - 1, 1); } for(int i = 1; i <= m; i++) { int l, r, k; bool val; cin >> l >> r >> k >> val; l++; r++; if(val == 0) addMinDiff(r, l - 1, k); else addMaxDiff(r, l - 1, k - 1); } if(BellmanFord() == true) { for(int i = 1; i <= n; i++) cout << 1 - (dist[i] - dist[i - 1]) << " "; cout << "\n"; } else cout << "-1\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...