제출 #869803

#제출 시각아이디문제언어결과실행 시간메모리
869803Ariadna여행하는 상인 (APIO17_merchant)C++14
0 / 100
41 ms3528 KiB
#include <bits/stdc++.h> #define int long long using namespace std; vector < vector < pair < int, int > > > adj; vector < vector < int > > b; vector < vector < int > > s; vector < pair < int, vector < int > > > cicles; vector < bool > visited; void dfs(int u, int minutes, vector < int >& cicle) { visited[u] = true; for (pair < int, int > p : adj[u]) { int v = p.first, d = p.second; if (!visited[v]) { cicle.push_back(v); dfs(v, minutes + d, cicle); cicle.pop_back(); visited[v] = false; } else if (v == 0) { cicles.push_back(make_pair(minutes + d, cicle)); } } } signed main() { int n, m, k; cin >> n >> m >> k; b = s = vector < vector < int > >(n, vector < int >(k)); for (int i = 1; i < n; ++i) { for (int j = 0; j < k; ++j) { cin >> b[i][j] >> s[i][j]; } } adj = vector < vector < pair < int, int > > >(n); while (m--) { int u, v, d; cin >> u >> v >> d; --u; --v; adj[u].push_back(make_pair(v, d)); } vector < int > profit(n, 0); for (int i = 0; i < n; ++i) { for (int j = 0; j < k; ++j) { if (s[i][j] != -1) profit[i] = max(profit[i], s[i][j] - b[0][j]); } } vector < int > cicle = {0}; visited = vector < bool >(n, false); dfs(0, 0, cicle); int ans = 0; for (pair < int, vector < int > > p : cicles) { int t = p.first, max_profit = 0; for (int i : p.second) { max_profit = max(max_profit, profit[i]); } if (t > 0) ans = max(ans, max_profit / t); } 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...