Task: | Airport |
Sender: | aalto2024h_004 |
Submission time: | 2024-10-23 17:18:48 +0300 |
Language: | C++ (C++17) |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.01 s | details |
#2 | ACCEPTED | 0.01 s | details |
#3 | ACCEPTED | 0.01 s | details |
#4 | ACCEPTED | 0.01 s | details |
#5 | ACCEPTED | 0.01 s | details |
#6 | ACCEPTED | 0.01 s | details |
#7 | ACCEPTED | 0.01 s | details |
#8 | ACCEPTED | 0.01 s | details |
#9 | ACCEPTED | 0.01 s | details |
#10 | ACCEPTED | 0.01 s | details |
#11 | ACCEPTED | 0.01 s | details |
#12 | ACCEPTED | 0.01 s | details |
#13 | ACCEPTED | 0.01 s | details |
Code
// ~/.vim/cpp_template.cpp #include <bits/stdc++.h> #include <iostream> #include <vector> #include <algorithm> #include <string> #include <limits> #define REP(i,a,b) for (long long i = a; i < b; i++) /* // Type Aliases for 1D and 2D vectors with initialization #define vi(n, val) vector<long long>(n, val) // 1D vector of long longs with size n, initialized to val #define vll(n, val) vector<long long>(n, val) // 1D vector of long longs with size n, initialized to val #define ll long long #define vvi(n, m, val) vector<vector<long long>>(n, vector<long long>(m, val)) // 2D vector of long longs (n x m), initialized to val #define vvll(n, m, val) vector<vector<long long>>(n, vector<long long>(m, val)) // 2D vector of long longs (n x m), initialized to val */ #define LL_INF std::numeric_limits<long long int>::max() using namespace std; template <typename T> void pV(const std::vector<T>& vec, const std::string& label = "Vector") { std::cout << label << ": [ "; for (const auto& elem : vec) { std::cout << elem << " "; } std::cout << "]" << std::endl; } void dfs(long long s, vector<bool> *visited, vector<long long> (*adj)[]) { if ((*visited)[s]) return; (*visited)[s] = true; // process node s for (auto u: (*adj)[s]) { dfs(u, visited, adj); } } /* // DEPTH-FRIRST-SEARCH vector<long long> adj[N]; vector<bool> visited(N, false); long long u, v; for(long long i = 0; i < M;i++){ cin >> u >> v; u--; v--; adj[u].push_back(v); adj[v].push_back(u); } */ vector<long long> dijkstra(long long N, long long x, vector<vector<pair<long long,long long>>> *adj){ vector<bool> processed(N, false); vector<long long> distance(N, LL_INF); priority_queue<pair<long long,long long>> q; //for (long long i = 1; i <= n; i++) distance[i] = INF; distance[x] = 0; q.push({0,x}); while (!q.empty()) { long long a = q.top().second; q.pop(); if (processed[a]) continue; processed[a] = true; for (auto u : (*adj)[a]) { long long b = u.first, w = u.second; if (distance[a]+w < distance[b]) { distance[b] = distance[a]+w; q.push({-distance[b],b}); } } } return distance; } /* DIJKSTRA //vector<vector<pair<long long,long long>>> adj(N, vector<pair<long long, long long>>(N)); */ const long long MAX_N = 500; bool bfs(long long s, long long t, vector<vector<long long>>& capacity, vector<long long>& parent, vector<vector<long long>>& adj) { long long n = capacity.size(); vector<bool> visited(n, false); queue<long long> q; q.push(s); visited[s] = true; parent[s] = -1; while(!q.empty()) { long long u = q.front(); q.pop(); for(long long v : adj[u]) { if(!visited[v] && capacity[u][v] > 0) { parent[v] = u; if(v == t) { return true; } visited[v] = true; q.push(v); } } } return false; } long long edmondsKarp(long long s, long long t, vector<vector<long long>>& capacity, vector<vector<long long>>& adj) { long long u, v; long long n = capacity.size(); vector<long long> parent(n); long long maxFlow = 0; while(bfs(s, t, capacity, parent, adj)) { long long pathFlow = INT_MAX; for(v = t; v != s; v = parent[v]) { u = parent[v]; pathFlow = min(pathFlow, capacity[u][v]); } for(v = t; v != s; v = parent[v]) { u = parent[v]; capacity[u][v] -= pathFlow; capacity[v][u] += pathFlow; } maxFlow += pathFlow; } return maxFlow; } int main() { ios::sync_with_stdio(0); cin.tie(0); // Your code starts here long long n, m; cin >> n >> m; long long N=n; n+=1000; vector<vector<long long>> capacity(n + 1, vector<long long>(n + 1, 0)); vector<vector<long long>> adj(n + 1); REP(i, 0, N){ long long c; cin >> c; if(c == -1){ c = 1000000000000000; } capacity[i][i+1000] += c; adj[i].push_back(i+1000); } for (long long i = 0; i < m; i++) { long long a, b; cin >> a >> b; a--; b--; adj[a+1000].push_back(b); adj[b].push_back(a+1000); capacity[a+1000][b] += 1000000000000000; } cout << edmondsKarp(0, n-1, capacity, adj) << endl; return 0; }
Test details
Test 1
Verdict: ACCEPTED
input |
---|
10 20 -1 85 7 19 90 72 11 46 65 -1 6 7 9 7 8 4 ... |
correct output |
---|
7 |
user output |
---|
7 |
Test 2
Verdict: ACCEPTED
input |
---|
10 20 -1 80 77 57 77 95 63 98 30 -1 6 7 8 9 7 8 ... |
correct output |
---|
30 |
user output |
---|
30 |
Test 3
Verdict: ACCEPTED
input |
---|
10 20 -1 63 16 42 62 70 9 94 68 -1 10 9 6 8 10 6 ... |
correct output |
---|
25 |
user output |
---|
25 |
Test 4
Verdict: ACCEPTED
input |
---|
10 20 -1 3 86 -1 32 34 9 50 -1 -1 6 7 7 8 9 2 ... |
correct output |
---|
3 |
user output |
---|
3 |
Test 5
Verdict: ACCEPTED
input |
---|
10 20 -1 43 38 -1 7 54 26 97 76 -1 3 9 9 10 6 7 ... |
correct output |
---|
76 |
user output |
---|
76 |
Test 6
Verdict: ACCEPTED
input |
---|
100 1000 -1 425576195 274150382 1021768... |
correct output |
---|
6091126630 |
user output |
---|
6091126630 |
Test 7
Verdict: ACCEPTED
input |
---|
100 1000 -1 769953265 -1 389517741 2323... |
correct output |
---|
769953265 |
user output |
---|
769953265 |
Test 8
Verdict: ACCEPTED
input |
---|
100 1000 -1 584988267 763129662 6781413... |
correct output |
---|
1699511766 |
user output |
---|
1699511766 |
Test 9
Verdict: ACCEPTED
input |
---|
100 1000 -1 921671366 121044688 2933366... |
correct output |
---|
1805833567 |
user output |
---|
1805833567 |
Test 10
Verdict: ACCEPTED
input |
---|
100 1000 -1 763842763 612011030 4532521... |
correct output |
---|
3342235784 |
user output |
---|
3342235784 |
Test 11
Verdict: ACCEPTED
input |
---|
3 3
-1 1 -1 1 2 2 3 2 2 |
correct output |
---|
1 |
user output |
---|
1 |
Test 12
Verdict: ACCEPTED
input |
---|
3 4
-1 1 -1 1 2 1 2 2 3 ... |
correct output |
---|
1 |
user output |
---|
1 |
Test 13
Verdict: ACCEPTED
input |
---|
7 8 -1 1 1 1 1 1 -1 1 2 1 3 2 4 ... |
correct output |
---|
1 |
user output |
---|
1 |