Submission #1868981


Source Code Expand

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;

const int MaxN = 100;
const int MaxM = 100;

const int MaxNV = MaxN + MaxM + 2;
const int MaxNE = MaxN * MaxM + 2;

const int INF = 0x3f3f3f3f;

int n, m;
char s[MaxM + 2];

int vS, vT;

struct halfEdge
{
	int v, w;
	halfEdge *next;
};
halfEdge adj_pool[MaxNE * 2], *adj_tail = adj_pool;
halfEdge *adj[MaxNV + 1];

inline void addEdge(const int &u, const int &v, const int &wA, const int &wB = 0)
{
	adj_tail->v = v, adj_tail->w = wA, adj_tail->next = adj[u], adj[u] = adj_tail++;
	adj_tail->v = u, adj_tail->w = wB, adj_tail->next = adj[v], adj[v] = adj_tail++;
}

inline halfEdge *oppo(const halfEdge *e)
{
	return adj_pool + ((e - adj_pool) ^ 1);
}

int q_n, q[MaxNV + 1];

int lev[MaxNV + 1];
halfEdge *dfsCur[MaxNV + 1];

inline bool calc_dist()
{
	q_n = 0;
	for (int u = 1; u <= vT; ++u)
		lev[u] = -1, dfsCur[u] = adj[u];
	lev[vS] = 0;

	q[++q_n] = vS;
	for (int i = 1; i <= q_n; ++i)
	{
		int u = q[i];
		for (halfEdge *e = adj[u]; e; e = e->next)
			if (e->w && !~lev[e->v])
			{
				lev[e->v] = lev[u] + 1;
				if (e->v == vT)
					return true;
				q[++q_n] = e->v;
			}
	}

	return false;
}

int dfs(const int &u, const int &flow)
{
	if (u == vT || !flow)
		return flow;

	int res = 0;
	for (halfEdge *&e = dfsCur[u]; e; e = e->next)
		if (e->w && lev[e->v] > lev[u])
		{
			int delta = dfs(e->v, min(e->w, flow - res));
			if (delta > 0)
			{
				e->w -= delta, oppo(e)->w += delta;
				if ((res += delta) == flow)
					break;
			}
		}

	if (res < flow)
		lev[u] = -1;

	return res;
}

int main()
{
	cin >> n >> m;

	vS = n * m + 1, vT = vS + 1;
	for (int i = 1; i <= n; ++i)
	{
		scanf("%s", s + 1);

		for (int j = 1; j <= m; ++j)
		{
			if (s[j] == 'o')
				addEdge(i, j + n, 1, 1);
			else if (s[j] == 'S')
			{
				addEdge(vS, i + 0, INF);
				addEdge(vS, j + n, INF);
			}
			else if (s[j] == 'T')
			{
				addEdge(i + 0, vT, INF);
				addEdge(j + n, vT, INF);
			}
		}
	}

	int tot_flow = 0;
	while (tot_flow < INF && calc_dist())
		tot_flow += dfs(vS, INF);

	if (tot_flow >= INF)
		cout << -1 << endl;
	else
		cout << tot_flow << endl;

	return 0;
}

Submission Info

Submission Time
Task F - Lotus Leaves
User InvUsr
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2315 Byte
Status RE
Exec Time 2103 ms
Memory 512 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:100:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
   scanf("%s", s + 1);
                     ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 800
Status
AC × 4
AC × 10
WA × 19
TLE × 6
RE × 19
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 256 KB
0_01.txt AC 1 ms 256 KB
0_02.txt AC 1 ms 256 KB
0_03.txt AC 1 ms 256 KB
1_00.txt AC 1 ms 256 KB
1_01.txt AC 1 ms 256 KB
1_02.txt AC 1 ms 256 KB
1_03.txt AC 1 ms 256 KB
1_04.txt RE 95 ms 384 KB
1_05.txt AC 1 ms 384 KB
1_06.txt WA 1 ms 512 KB
1_07.txt RE 95 ms 256 KB
1_08.txt WA 1 ms 384 KB
1_09.txt WA 1 ms 512 KB
1_10.txt WA 1 ms 384 KB
1_11.txt WA 1 ms 256 KB
1_12.txt RE 94 ms 256 KB
1_13.txt WA 1 ms 384 KB
1_14.txt WA 1 ms 384 KB
1_15.txt RE 96 ms 384 KB
1_16.txt WA 1 ms 256 KB
1_17.txt TLE 2103 ms 256 KB
1_18.txt WA 1 ms 256 KB
1_19.txt WA 1 ms 384 KB
1_20.txt RE 94 ms 384 KB
1_21.txt RE 95 ms 256 KB
1_22.txt WA 1 ms 384 KB
1_23.txt TLE 2103 ms 384 KB
1_24.txt RE 95 ms 256 KB
1_25.txt TLE 2103 ms 384 KB
1_26.txt TLE 2103 ms 384 KB
1_27.txt RE 95 ms 256 KB
1_28.txt RE 94 ms 256 KB
1_29.txt RE 94 ms 384 KB
1_30.txt TLE 2103 ms 256 KB
1_31.txt WA 1 ms 384 KB
1_32.txt WA 1 ms 384 KB
1_33.txt RE 94 ms 256 KB
1_34.txt WA 1 ms 384 KB
1_35.txt RE 95 ms 384 KB
1_36.txt RE 94 ms 384 KB
1_37.txt RE 94 ms 384 KB
1_38.txt AC 1 ms 384 KB
1_39.txt WA 1 ms 384 KB
1_40.txt RE 94 ms 256 KB
1_41.txt WA 1 ms 384 KB
1_42.txt RE 94 ms 256 KB
1_43.txt WA 1 ms 256 KB
1_44.txt RE 94 ms 256 KB
1_45.txt WA 1 ms 384 KB
1_46.txt RE 95 ms 256 KB
1_47.txt RE 94 ms 256 KB
1_48.txt TLE 2103 ms 256 KB
1_49.txt WA 1 ms 384 KB