Submission #1774080
Source Code Expand
#include <iostream> #include <iomanip> // << fixed << setprecision(xxx) #include <algorithm> // do { } while ( next_permutation(A, A+xxx) ) ; #include <vector> #include <string> // to_string(nnn) // substr(m, n) // stoi(nnn) #include <complex> #include <tuple> // get<n>(xxx) #include <queue> #include <stack> #include <map> // if (M.find(key) != M.end()) { } #include <set> // S.insert(M); // if (S.find(key) != S.end()) { } // for (auto it=S.begin(); it != S.end(); it++) { } // auto it = S.lower_bound(M); #include <random> // random_device rd; mt19937 mt(rd()); #include <cctype> #include <cassert> #include <cmath> #include <cstdio> #include <cstdlib> // atoi(xxx) using namespace std; #define DEBUG 0 // change 0 -> 1 if we need debug. // insert #if<tab> by my emacs. #if DEBUG == 1 ... #end typedef long long ll; // const int dx[4] = {1, 0, -1, 0}; // const int dy[4] = {0, 1, 0, -1}; // const int C = 1e6+10; const ll infty = 1000000007; struct edge { int to; ll cap; int rev; }; bool visited[10010]; vector<edge> V[10010]; void add_edge(int from, int to, ll cap) { V[from].push_back(edge{to, cap, (int)V[to].size()}); V[to].push_back(edge{from, 0, (int)V[from].size()-1}); } ll dfs(int src, int dst, ll f) { if (src == dst) return f; visited[src] = true; for (auto &x : V[src]) { if (!visited[x.to] && x.cap > 0) { ll d = dfs(x.to, dst, min(f, x.cap)); if (d > 0) { x.cap -= d; V[x.to][x.rev].cap += d; return d; } } } return 0; } ll max_flow(int src, int dst) { ll flow = 0; while (true) { fill(visited, visited+10010, false); ll f = dfs(src, dst, infty); if (f == 0) return flow; flow += f; } } int H, W; string a[110]; int num(int i, int j) { return i * H + j; } int main () { cin >> H >> W; for (auto i = 0; i < H; ++i) { cin >> a[i]; } int S = 300, T = 301; int si, sj, ti, tj; for (auto i = 0; i < H; ++i) { for (auto j = 0; j < W; ++j) { if (a[i][j] == 'S') { si = i; sj = j; a[i][j] = 'o'; add_edge(S, i, infty); add_edge(S, j+H, infty); } else if (a[i][j] == 'T') { ti = i; tj = j; a[i][j] = 'o'; add_edge(i, T, infty); add_edge(j+H, T, infty); } } } if (si == ti || sj == tj) { cout << -1 << endl; return 0; } for (auto i = 0; i < H; ++i) { for (auto j = 0; j < W; ++j) { if (a[i][j] == 'o') { add_edge(i, j+H, 1); add_edge(j+H, i, 1); } } } cout << max_flow(S, T) << endl; }
Submission Info
Submission Time | |
---|---|
Task | F - Lotus Leaves |
User | kazunetakahashi |
Language | C++14 (GCC 5.4.1) |
Score | 800 |
Code Size | 2706 Byte |
Status | AC |
Exec Time | 10 ms |
Memory | 1792 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 800 / 800 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt |
All | 0_00.txt, 0_01.txt, 0_02.txt, 0_03.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt, 1_20.txt, 1_21.txt, 1_22.txt, 1_23.txt, 1_24.txt, 1_25.txt, 1_26.txt, 1_27.txt, 1_28.txt, 1_29.txt, 1_30.txt, 1_31.txt, 1_32.txt, 1_33.txt, 1_34.txt, 1_35.txt, 1_36.txt, 1_37.txt, 1_38.txt, 1_39.txt, 1_40.txt, 1_41.txt, 1_42.txt, 1_43.txt, 1_44.txt, 1_45.txt, 1_46.txt, 1_47.txt, 1_48.txt, 1_49.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
0_00.txt | AC | 1 ms | 512 KB |
0_01.txt | AC | 1 ms | 512 KB |
0_02.txt | AC | 1 ms | 512 KB |
0_03.txt | AC | 1 ms | 512 KB |
1_00.txt | AC | 1 ms | 512 KB |
1_01.txt | AC | 1 ms | 512 KB |
1_02.txt | AC | 1 ms | 512 KB |
1_03.txt | AC | 1 ms | 512 KB |
1_04.txt | AC | 2 ms | 512 KB |
1_05.txt | AC | 3 ms | 1152 KB |
1_06.txt | AC | 10 ms | 1792 KB |
1_07.txt | AC | 2 ms | 512 KB |
1_08.txt | AC | 2 ms | 512 KB |
1_09.txt | AC | 2 ms | 512 KB |
1_10.txt | AC | 2 ms | 768 KB |
1_11.txt | AC | 2 ms | 768 KB |
1_12.txt | AC | 2 ms | 512 KB |
1_13.txt | AC | 3 ms | 896 KB |
1_14.txt | AC | 3 ms | 1024 KB |
1_15.txt | AC | 3 ms | 1152 KB |
1_16.txt | AC | 2 ms | 640 KB |
1_17.txt | AC | 2 ms | 768 KB |
1_18.txt | AC | 2 ms | 640 KB |
1_19.txt | AC | 3 ms | 896 KB |
1_20.txt | AC | 2 ms | 1024 KB |
1_21.txt | AC | 2 ms | 640 KB |
1_22.txt | AC | 3 ms | 1152 KB |
1_23.txt | AC | 3 ms | 1024 KB |
1_24.txt | AC | 2 ms | 640 KB |
1_25.txt | AC | 2 ms | 1024 KB |
1_26.txt | AC | 2 ms | 1024 KB |
1_27.txt | AC | 2 ms | 768 KB |
1_28.txt | AC | 2 ms | 768 KB |
1_29.txt | AC | 2 ms | 896 KB |
1_30.txt | AC | 2 ms | 896 KB |
1_31.txt | AC | 3 ms | 1152 KB |
1_32.txt | AC | 4 ms | 1152 KB |
1_33.txt | AC | 2 ms | 512 KB |
1_34.txt | AC | 2 ms | 1024 KB |
1_35.txt | AC | 3 ms | 1024 KB |
1_36.txt | AC | 2 ms | 1024 KB |
1_37.txt | AC | 4 ms | 1152 KB |
1_38.txt | AC | 2 ms | 1024 KB |
1_39.txt | AC | 4 ms | 1152 KB |
1_40.txt | AC | 2 ms | 512 KB |
1_41.txt | AC | 2 ms | 512 KB |
1_42.txt | AC | 2 ms | 512 KB |
1_43.txt | AC | 2 ms | 512 KB |
1_44.txt | AC | 2 ms | 512 KB |
1_45.txt | AC | 2 ms | 512 KB |
1_46.txt | AC | 2 ms | 512 KB |
1_47.txt | AC | 2 ms | 512 KB |
1_48.txt | AC | 2 ms | 512 KB |
1_49.txt | AC | 2 ms | 512 KB |