Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <algorithm>
- #include <iomanip>
- #include <random>
- #include <ctime>
- #include <bitset>
- #include <map>
- #include <set>
- #include <unordered_map>
- #include <unordered_set>
- #include <cmath>
- #include <climits>
- #include <cstring>
- #include <queue>
- #include <deque>
- #include <list>
- #include <stack>
- #define pb push_back
- #define ff first
- #define ss second
- #define sqr(x) (x) * (x)
- #define cb(x) (x) * (x) * (x)
- #define SIZE 101
- #define INF 1e18 + 9
- using namespace std;
- typedef long long ll;
- typedef long double ld;
- typedef pair<int, int> pii;
- typedef pair<ll, ll> pll;
- const int inf = 2e9;
- const ll linf = 2e18;
- const ll mod = 1e9 + 7;
- template <typename T>
- ostream& operator << (ostream& s, vector<T>& v) {
- for (auto el : v) {
- s << el << " ";
- }
- return s;
- }
- typedef vector<int> graf_line;
- typedef vector<graf_line> graf;
- typedef vector<int> vint;
- typedef vector<vint> vvint;
- int main() {
- int n;
- cin >> n;
- vvint c(n, vint(n));
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++){
- if (j > i) c[i][j] = j - i;
- }
- vvint f(n, vint(n));
- for (;;)
- {
- vint from(n, -1);
- vint q(n);
- int h = 0, t = 0;
- q[t++] = 0;
- from[0] = 0;
- for (int cur; h < t;)
- {
- cur = q[h++];
- for (int v = 0; v < n; v++)
- if (from[v] == -1 &&
- c[cur][v] - f[cur][v] > 0)
- {
- q[t++] = v;
- from[v] = cur;
- }
- }
- if (from[n - 1] == -1)
- break;
- int cf = inf;
- for (int cur = n - 1; cur != 0; )
- {
- int prev = from[cur];
- cf = min(cf, c[prev][cur] - f[prev][cur]);
- cur = prev;
- }
- for (int cur = n - 1; cur != 0; )
- {
- int prev = from[cur];
- f[prev][cur] += cf;
- f[cur][prev] -= cf;
- cur = prev;
- }
- }
- int flow = 0;
- for (int i = 0; i < n; i++)
- if (c[0][i])
- flow += f[0][i];
- cout << flow;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement