Submission #656858

#TimeUsernameProblemLanguageResultExecution timeMemory
656858Melika0ghTravelling Merchant (APIO17_merchant)C++17
0 / 100
62 ms3532 KiB
#include<bits/stdc++.h> using namespace std; typedef long long int ll; typedef pair<int, int> pii; const int maxn = 102, maxk = 1e3+2, inf = 1e9+10; ll b[maxn][maxk], s[maxn][maxk], max_ben[maxn][maxn], dis[maxn][maxn]; int N, M, K; struct edge { int v, u; }; vector<edge> edges; void FloydWarshall() { for(int v = 0; v < N; v++) dis[v][v] = 0; for(int k = 0; k < N; k++) { for(int v = 0; v < N; v++) { for(int u = 0; u < N; u++) { dis[v][u] = min(dis[u][v], dis[v][k] + dis[k][u]); } } } return; } void CalcBen() { for(int v = 0; v < N; v++) { for(int u = 0; u < N; u++) { max_ben[v][u] = 0; for(int k = 0; k < K; k++) { if(b[v][k] != -1 && s[u][k] != -1) max_ben[v][u] = max(max_ben[v][u], s[u][k] - b[v][k]); } } } return; } bool Valid(ll x) { edges.clear(); ll w[maxn][maxn], d[maxn]; for(int v = 0; v < N; v++) { d[v] = inf; for(int u = 0; u < N; u++) { w[v][u] = x * dis[v][u] - max_ben[v][u]; edges.push_back({v, u}); } } d[0] = 0; for(int i = 0; i < N; i++) { for(auto tmp : edges) { int v = tmp.v, u = tmp.u; if(d[u] > d[v] + w[v][u]) { d[u] = d[v] + w[v][u]; } } } for(auto tmp : edges) { int v = tmp.v, u = tmp.u; if(d[u] > d[v] + w[v][u]) { d[u] = d[v] + w[v][u]; return true; } } return false; } int Bs(int l, int r) { if(r - l <= 1) { return l; } int mid = (l + r) / 2; if(Valid(mid)) return Bs(mid, r); else return Bs(l, mid); } int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin >> N >> M >> K; for(int i = 0; i < N; i++) for(int j = 0; j < K; j++) cin >> b[i][j] >> s[i][j]; memset(dis, 63, sizeof dis); for(int i = 0; i < M; i++) { int v, u, w; cin >> v >> u >> w; v--, u--; dis[v][u] = w; } FloydWarshall(); CalcBen(); int ans = Bs(0, inf); 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...