Submission #771788

# Submission time Handle Problem Language Result Execution time Memory
771788 2023-07-03T09:19:25 Z LittleCube From Hacks to Snitches (BOI21_watchmen) C++17
40 / 100
6000 ms 233120 KB
#include <bits/stdc++.h>
#define ll long long
#define state tuple<ll, int, int, int>
#define F first
#define S second
using namespace std;

int N, M, K, L, l[2500005], r[2500005], nxt[2500005], mp[2000];
ll cnt = 0;
vector<int> v[2000];
vector<ll> dis[2500005];
vector<bitset<128>> vis[2500005];
vector<int> E[2500005];

bool good(int u, ll t)
{
	return l[u] == 1 || t % l[u] != r[u];
}

bool goodmove(int u, int v, ll t)
{
	if (u == nxt[v])
		return good(u, t) && good(v, t);
	else
		return good(v, t);
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0), cout.tie(0);
	cin >> N >> M;
	for (int i = 1; i <= M; i++)
	{
		int u, v;
		cin >> u >> v;
		E[u].emplace_back(v);
		E[v].emplace_back(u);
	}
	for (int i = 1; i <= N; i++)
		l[i] = 1;
	cin >> K;
	for (int i = 1; i <= K; i++)
	{
		int k;
		cin >> k;
		if (mp[k] == 0)
			mp[k] = ++L;
		v[i].resize(k);
		for (int j = 0; j < k; j++)
		{
			cin >> v[i][j];
			l[v[i][j]] = k;
			r[v[i][j]] = j;
			vis[v[i][j]].resize(k);
		}
		for (int j = 0; j < k; j++)
			nxt[v[i][j]] = v[i][(j + 1) % k];
	}
	assert(L < 128);
	for (int i = 1; i <= N; i++)
		dis[i].resize(l[i], (ll)1e18);
	dis[1][0] = 0;
	priority_queue<state, vector<state>, greater<state>> pq;
	pq.push(state{0, 1, 0, 0});
	while (!pq.empty())
	{
		auto [d, u, k, b] = pq.top();
		pq.pop();
		if (!b && d > dis[u][k])
			continue;
		if (!b)
		{
			for (auto v : E[u])
				if (l[v] == 1 && d + 1 < dis[v][0])
				{
					dis[v][0] = d + 1;
					pq.push(state{d + 1, v, 0, 0});
				}
				else if (l[v] > 1)
				{
					if (!goodmove(u, v, d + 1) && l[u] % l[v] == 0)
						continue;
					pq.push(state{d, u, k, v});
				}

			int rem = (d + 1) % l[u];
			if (good(u, d + 1) && dis[u][rem] > d + 1)
			{
				dis[u][rem] = d + 1;
				pq.push(state{d + 1, u, rem, 0});
			}
		}
		else
		{
			cnt++;
			// u -> b
			int rem = (d + 1) % l[b];
			if (vis[b][rem][mp[l[u]]])
				continue;
			if (goodmove(u, b, d + 1))
			{
				if (dis[b][rem] > d + 1)
				{
					dis[b][rem] = d + 1;
					pq.push(state{d + 1, b, rem, 0});
				}
			}
			vis[b][rem][mp[l[u]]] = 1;
			pq.push(state{d + l[u], u, k, b});
		}
	}
	// for (int i = 1; i <= N; i++)
	// {
	// 	cout << i << ":";
	// 	for (auto j : dis[i])
	// 		cout << ' ' << j;
	// 	cout << '\n';
	// }
	cerr << "update counter " << cnt << '\n';
	if (dis[N][0] >= 1e18)
		cout << "impossible\n";
	else
		cout << dis[N][0] << '\n';
}
# Verdict Execution time Memory Grader output
1 Correct 351 ms 178216 KB Output is correct
2 Correct 124 ms 184500 KB Output is correct
3 Correct 127 ms 183872 KB Output is correct
4 Correct 377 ms 184032 KB Output is correct
5 Correct 83 ms 177328 KB Output is correct
6 Correct 128 ms 183884 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 346 ms 178248 KB Output is correct
2 Correct 126 ms 184512 KB Output is correct
3 Correct 130 ms 183940 KB Output is correct
4 Correct 374 ms 184092 KB Output is correct
5 Correct 98 ms 177356 KB Output is correct
6 Correct 125 ms 183880 KB Output is correct
7 Correct 116 ms 183452 KB Output is correct
8 Correct 112 ms 183372 KB Output is correct
9 Correct 110 ms 183244 KB Output is correct
10 Correct 178 ms 183728 KB Output is correct
11 Correct 132 ms 183452 KB Output is correct
12 Correct 119 ms 183488 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 346 ms 178248 KB Output is correct
2 Correct 126 ms 184512 KB Output is correct
3 Correct 130 ms 183940 KB Output is correct
4 Correct 374 ms 184092 KB Output is correct
5 Correct 98 ms 177356 KB Output is correct
6 Correct 125 ms 183880 KB Output is correct
7 Correct 116 ms 183452 KB Output is correct
8 Correct 112 ms 183372 KB Output is correct
9 Correct 110 ms 183244 KB Output is correct
10 Correct 178 ms 183728 KB Output is correct
11 Correct 132 ms 183452 KB Output is correct
12 Correct 119 ms 183488 KB Output is correct
13 Correct 350 ms 178356 KB Output is correct
14 Correct 124 ms 184484 KB Output is correct
15 Correct 129 ms 183880 KB Output is correct
16 Correct 369 ms 184092 KB Output is correct
17 Correct 85 ms 177368 KB Output is correct
18 Correct 143 ms 183892 KB Output is correct
19 Correct 115 ms 183468 KB Output is correct
20 Correct 114 ms 183368 KB Output is correct
21 Correct 109 ms 183240 KB Output is correct
22 Correct 221 ms 183780 KB Output is correct
23 Correct 124 ms 183424 KB Output is correct
24 Correct 118 ms 183496 KB Output is correct
25 Correct 1058 ms 229628 KB Output is correct
26 Correct 1000 ms 233120 KB Output is correct
27 Correct 1014 ms 227880 KB Output is correct
28 Correct 812 ms 231108 KB Output is correct
29 Execution timed out 6048 ms 224184 KB Time limit exceeded
30 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 346 ms 178248 KB Output is correct
2 Correct 126 ms 184512 KB Output is correct
3 Correct 130 ms 183940 KB Output is correct
4 Correct 374 ms 184092 KB Output is correct
5 Correct 98 ms 177356 KB Output is correct
6 Correct 125 ms 183880 KB Output is correct
7 Correct 116 ms 183452 KB Output is correct
8 Correct 112 ms 183372 KB Output is correct
9 Correct 110 ms 183244 KB Output is correct
10 Correct 178 ms 183728 KB Output is correct
11 Correct 132 ms 183452 KB Output is correct
12 Correct 119 ms 183488 KB Output is correct
13 Correct 350 ms 178356 KB Output is correct
14 Correct 124 ms 184484 KB Output is correct
15 Correct 129 ms 183880 KB Output is correct
16 Correct 369 ms 184092 KB Output is correct
17 Correct 85 ms 177368 KB Output is correct
18 Correct 143 ms 183892 KB Output is correct
19 Correct 115 ms 183468 KB Output is correct
20 Correct 114 ms 183368 KB Output is correct
21 Correct 109 ms 183240 KB Output is correct
22 Correct 221 ms 183780 KB Output is correct
23 Correct 124 ms 183424 KB Output is correct
24 Correct 118 ms 183496 KB Output is correct
25 Correct 1058 ms 229628 KB Output is correct
26 Correct 1000 ms 233120 KB Output is correct
27 Correct 1014 ms 227880 KB Output is correct
28 Correct 812 ms 231108 KB Output is correct
29 Execution timed out 6048 ms 224184 KB Time limit exceeded
30 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 351 ms 178216 KB Output is correct
2 Correct 124 ms 184500 KB Output is correct
3 Correct 127 ms 183872 KB Output is correct
4 Correct 377 ms 184032 KB Output is correct
5 Correct 83 ms 177328 KB Output is correct
6 Correct 128 ms 183884 KB Output is correct
7 Correct 346 ms 178248 KB Output is correct
8 Correct 126 ms 184512 KB Output is correct
9 Correct 130 ms 183940 KB Output is correct
10 Correct 374 ms 184092 KB Output is correct
11 Correct 98 ms 177356 KB Output is correct
12 Correct 125 ms 183880 KB Output is correct
13 Correct 116 ms 183452 KB Output is correct
14 Correct 112 ms 183372 KB Output is correct
15 Correct 110 ms 183244 KB Output is correct
16 Correct 178 ms 183728 KB Output is correct
17 Correct 132 ms 183452 KB Output is correct
18 Correct 119 ms 183488 KB Output is correct
19 Correct 74 ms 176428 KB Output is correct
20 Correct 77 ms 176500 KB Output is correct
21 Correct 76 ms 176460 KB Output is correct
22 Correct 360 ms 178268 KB Output is correct
23 Correct 146 ms 184472 KB Output is correct
24 Correct 132 ms 183876 KB Output is correct
25 Correct 378 ms 184044 KB Output is correct
26 Correct 83 ms 177384 KB Output is correct
27 Correct 138 ms 183868 KB Output is correct
28 Correct 118 ms 183496 KB Output is correct
29 Correct 128 ms 183448 KB Output is correct
30 Correct 120 ms 183304 KB Output is correct
31 Correct 220 ms 183716 KB Output is correct
32 Correct 124 ms 183412 KB Output is correct
33 Correct 123 ms 183452 KB Output is correct
34 Correct 1120 ms 228676 KB Output is correct
35 Correct 1191 ms 225072 KB Output is correct
36 Correct 1147 ms 224936 KB Output is correct
37 Correct 943 ms 229472 KB Output is correct
38 Correct 1182 ms 226880 KB Output is correct
39 Correct 5565 ms 223920 KB Output is correct
40 Correct 4033 ms 225060 KB Output is correct
41 Correct 2580 ms 224720 KB Output is correct
42 Correct 1210 ms 227700 KB Output is correct
43 Correct 1336 ms 232268 KB Output is correct
44 Correct 1232 ms 232428 KB Output is correct
45 Correct 1311 ms 227992 KB Output is correct
46 Correct 1081 ms 227640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 351 ms 178216 KB Output is correct
2 Correct 124 ms 184500 KB Output is correct
3 Correct 127 ms 183872 KB Output is correct
4 Correct 377 ms 184032 KB Output is correct
5 Correct 83 ms 177328 KB Output is correct
6 Correct 128 ms 183884 KB Output is correct
7 Correct 346 ms 178248 KB Output is correct
8 Correct 126 ms 184512 KB Output is correct
9 Correct 130 ms 183940 KB Output is correct
10 Correct 374 ms 184092 KB Output is correct
11 Correct 98 ms 177356 KB Output is correct
12 Correct 125 ms 183880 KB Output is correct
13 Correct 116 ms 183452 KB Output is correct
14 Correct 112 ms 183372 KB Output is correct
15 Correct 110 ms 183244 KB Output is correct
16 Correct 178 ms 183728 KB Output is correct
17 Correct 132 ms 183452 KB Output is correct
18 Correct 119 ms 183488 KB Output is correct
19 Correct 350 ms 178356 KB Output is correct
20 Correct 124 ms 184484 KB Output is correct
21 Correct 129 ms 183880 KB Output is correct
22 Correct 369 ms 184092 KB Output is correct
23 Correct 85 ms 177368 KB Output is correct
24 Correct 143 ms 183892 KB Output is correct
25 Correct 115 ms 183468 KB Output is correct
26 Correct 114 ms 183368 KB Output is correct
27 Correct 109 ms 183240 KB Output is correct
28 Correct 221 ms 183780 KB Output is correct
29 Correct 124 ms 183424 KB Output is correct
30 Correct 118 ms 183496 KB Output is correct
31 Correct 1058 ms 229628 KB Output is correct
32 Correct 1000 ms 233120 KB Output is correct
33 Correct 1014 ms 227880 KB Output is correct
34 Correct 812 ms 231108 KB Output is correct
35 Execution timed out 6048 ms 224184 KB Time limit exceeded
36 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 351 ms 178216 KB Output is correct
2 Correct 124 ms 184500 KB Output is correct
3 Correct 127 ms 183872 KB Output is correct
4 Correct 377 ms 184032 KB Output is correct
5 Correct 83 ms 177328 KB Output is correct
6 Correct 128 ms 183884 KB Output is correct
7 Correct 346 ms 178248 KB Output is correct
8 Correct 126 ms 184512 KB Output is correct
9 Correct 130 ms 183940 KB Output is correct
10 Correct 374 ms 184092 KB Output is correct
11 Correct 98 ms 177356 KB Output is correct
12 Correct 125 ms 183880 KB Output is correct
13 Correct 116 ms 183452 KB Output is correct
14 Correct 112 ms 183372 KB Output is correct
15 Correct 110 ms 183244 KB Output is correct
16 Correct 178 ms 183728 KB Output is correct
17 Correct 132 ms 183452 KB Output is correct
18 Correct 119 ms 183488 KB Output is correct
19 Correct 350 ms 178356 KB Output is correct
20 Correct 124 ms 184484 KB Output is correct
21 Correct 129 ms 183880 KB Output is correct
22 Correct 369 ms 184092 KB Output is correct
23 Correct 85 ms 177368 KB Output is correct
24 Correct 143 ms 183892 KB Output is correct
25 Correct 115 ms 183468 KB Output is correct
26 Correct 114 ms 183368 KB Output is correct
27 Correct 109 ms 183240 KB Output is correct
28 Correct 221 ms 183780 KB Output is correct
29 Correct 124 ms 183424 KB Output is correct
30 Correct 118 ms 183496 KB Output is correct
31 Correct 1058 ms 229628 KB Output is correct
32 Correct 1000 ms 233120 KB Output is correct
33 Correct 1014 ms 227880 KB Output is correct
34 Correct 812 ms 231108 KB Output is correct
35 Execution timed out 6048 ms 224184 KB Time limit exceeded
36 Halted 0 ms 0 KB -