이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 = {};
visited = vector < bool >(n, false);
dfs(0, 0, cicle);
int ans = 1e18;
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 - 1]);
}
ans = min(ans, max_profit / t);
}
cout << ans << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |