Submission #409026

# Submission time Handle Problem Language Result Execution time Memory
409026 2021-05-20T05:26:43 Z Kevin_Zhang_TW From Hacks to Snitches (BOI21_watchmen) C++17
15 / 100
6000 ms 72112 KB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define pb emplace_back
#define AI(i) begin(i), end(i)
template<class T> bool chmin(T &a, T b) { return b < a && (a = b, true); }
template<class T> bool chmax(T &a, T b) { return a < b && (a = b, true); }
#ifdef KEV
#define DE(args...) kout("[ " + string(#args) + " ] = ", args)
void kout() { cerr << endl; }
template<class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ', kout(b...); }
void debug(auto l, auto r) { while (l != r) cerr << *l << " \n"[next(l)==r], ++l; }
#else
#define DE(...) 0
#define debug(...) 0
#endif

using t3 = pair<ll,int>;
const int MAX_N = 300010, MAX_K = 2800;
const ll inf = 1ll << 55;

int n, m;
vector<int> edge[MAX_N], cyc[MAX_N];
vector<ll> dp[MAX_N];
int cid[MAX_N], csz[MAX_N], cpos[MAX_N];

int32_t main() {
	ios_base::sync_with_stdio(0), cin.tie(0);
	cin >> n >> m;
	for (int a, b, i = 0;i < m;++i) {
		cin >> a >> b;
		edge[a].pb(b);
		edge[b].pb(a);
	}
	for (int i = 1;i <= n;++i) {
		dp[i].resize(1, inf);
		csz[i] = 1;
	}
	int K;
	cin >> K;
	for (int i = 1;i <= K;++i) {
		int len;
		cin >> len;
		cyc[i].resize(len);
		int c = 0;
		for (int &u : cyc[i]) {
			cin >> u;
			cid[u] = i;
			csz[u] = len;
			cpos[u] = c++;
			dp[u].resize(len, inf);
			DE(u, cpos[u], len);
		}
	}

	//priority_queue<t3, vector<t3>, greater<t3>> q;
	queue<pair<ll,int>> q;

	auto upd = [&](int x, ll d) {
		DE(x, d);
		if (chmin(dp[x][d % csz[x]], d)) 
			q.emplace(d, x);
	};

	upd(1, 0);


	// shortest path

	// now there are no two cycle being connected
	// check if at x, time is d can move to 
	auto valid = [&](int x, ll d, int u) {
		if (cid[u] == 0) return true;
		if (d % csz[u] == cpos[u]) return false;
		if (cid[x] == 0) return true;
		assert(cid[x] == cid[u]);
		if (cpos[u] == (cpos[x] - 1 + csz[x]) % csz[u]) {
			if (d % csz[u] == cpos[x]) return false;
		}
		return true;
	};

	while (q.size()) {
		auto [d, x] = q.front(); q.pop();
		//if (d != dp[x][ d % csz[x] ]) continue;
		if (cid[x]) {
			for (int u : edge[x]) {
				if (cid[u] == 0) {
					upd(u, d + 1);
					continue;
				}
				else {
					if (valid(x, d + 1, u))
						upd(u, d + 1);
				}
			}
			if (valid(x, d + 1, x))
				upd(x, d + 1);
		}
		else {
			for (int u : edge[x]) {
				if (cid[u] == 0) {
					upd(u, d + 1);
					continue;
				}
				else {
					if (valid(x, d + 1, u))
						upd(u, d + 1);
//					for (int i = 1;i <= csz[u];++i)
//						if (valid(x, d + i, u))
//							upd(u, d + i);
				}
			}
			if (d - dp[x][0] < 350)
				q.emplace(d + 1, x);
		}
	}
	// 

	ll res = inf;
	for (auto v : dp[n]) chmin(res, v);
	
	if (res == inf) cout << "impossible\n";
	else cout << res << '\n';
}

Compilation message

watchmen.cpp: In function 'int32_t main()':
watchmen.cpp:14:17: warning: statement has no effect [-Wunused-value]
   14 | #define DE(...) 0
      |                 ^
watchmen.cpp:52:4: note: in expansion of macro 'DE'
   52 |    DE(u, cpos[u], len);
      |    ^~
watchmen.cpp: In lambda function:
watchmen.cpp:14:17: warning: statement has no effect [-Wunused-value]
   14 | #define DE(...) 0
      |                 ^
watchmen.cpp:60:3: note: in expansion of macro 'DE'
   60 |   DE(x, d);
      |   ^~
# Verdict Execution time Memory Grader output
1 Correct 365 ms 22348 KB Output is correct
2 Correct 1917 ms 28772 KB Output is correct
3 Correct 2798 ms 28496 KB Output is correct
4 Correct 3966 ms 29012 KB Output is correct
5 Correct 14 ms 21592 KB Output is correct
6 Correct 3733 ms 28616 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 351 ms 22432 KB Output is correct
2 Correct 2062 ms 28780 KB Output is correct
3 Correct 2778 ms 28496 KB Output is correct
4 Correct 3871 ms 29012 KB Output is correct
5 Correct 16 ms 21580 KB Output is correct
6 Correct 3324 ms 28492 KB Output is correct
7 Correct 2346 ms 28312 KB Output is correct
8 Correct 2336 ms 28252 KB Output is correct
9 Correct 1967 ms 28144 KB Output is correct
10 Correct 3309 ms 28648 KB Output is correct
11 Correct 2844 ms 28504 KB Output is correct
12 Correct 3175 ms 28548 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 351 ms 22432 KB Output is correct
2 Correct 2062 ms 28780 KB Output is correct
3 Correct 2778 ms 28496 KB Output is correct
4 Correct 3871 ms 29012 KB Output is correct
5 Correct 16 ms 21580 KB Output is correct
6 Correct 3324 ms 28492 KB Output is correct
7 Correct 2346 ms 28312 KB Output is correct
8 Correct 2336 ms 28252 KB Output is correct
9 Correct 1967 ms 28144 KB Output is correct
10 Correct 3309 ms 28648 KB Output is correct
11 Correct 2844 ms 28504 KB Output is correct
12 Correct 3175 ms 28548 KB Output is correct
13 Correct 361 ms 22448 KB Output is correct
14 Correct 1785 ms 28780 KB Output is correct
15 Correct 2792 ms 28472 KB Output is correct
16 Correct 3862 ms 29004 KB Output is correct
17 Correct 14 ms 21576 KB Output is correct
18 Correct 3277 ms 28616 KB Output is correct
19 Correct 2245 ms 28316 KB Output is correct
20 Correct 2094 ms 28252 KB Output is correct
21 Correct 1763 ms 28112 KB Output is correct
22 Correct 3608 ms 28644 KB Output is correct
23 Correct 3694 ms 28416 KB Output is correct
24 Correct 3890 ms 28552 KB Output is correct
25 Execution timed out 6011 ms 72112 KB Time limit exceeded
26 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 351 ms 22432 KB Output is correct
2 Correct 2062 ms 28780 KB Output is correct
3 Correct 2778 ms 28496 KB Output is correct
4 Correct 3871 ms 29012 KB Output is correct
5 Correct 16 ms 21580 KB Output is correct
6 Correct 3324 ms 28492 KB Output is correct
7 Correct 2346 ms 28312 KB Output is correct
8 Correct 2336 ms 28252 KB Output is correct
9 Correct 1967 ms 28144 KB Output is correct
10 Correct 3309 ms 28648 KB Output is correct
11 Correct 2844 ms 28504 KB Output is correct
12 Correct 3175 ms 28548 KB Output is correct
13 Correct 361 ms 22448 KB Output is correct
14 Correct 1785 ms 28780 KB Output is correct
15 Correct 2792 ms 28472 KB Output is correct
16 Correct 3862 ms 29004 KB Output is correct
17 Correct 14 ms 21576 KB Output is correct
18 Correct 3277 ms 28616 KB Output is correct
19 Correct 2245 ms 28316 KB Output is correct
20 Correct 2094 ms 28252 KB Output is correct
21 Correct 1763 ms 28112 KB Output is correct
22 Correct 3608 ms 28644 KB Output is correct
23 Correct 3694 ms 28416 KB Output is correct
24 Correct 3890 ms 28552 KB Output is correct
25 Execution timed out 6011 ms 72112 KB Time limit exceeded
26 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 365 ms 22348 KB Output is correct
2 Correct 1917 ms 28772 KB Output is correct
3 Correct 2798 ms 28496 KB Output is correct
4 Correct 3966 ms 29012 KB Output is correct
5 Correct 14 ms 21592 KB Output is correct
6 Correct 3733 ms 28616 KB Output is correct
7 Correct 351 ms 22432 KB Output is correct
8 Correct 2062 ms 28780 KB Output is correct
9 Correct 2778 ms 28496 KB Output is correct
10 Correct 3871 ms 29012 KB Output is correct
11 Correct 16 ms 21580 KB Output is correct
12 Correct 3324 ms 28492 KB Output is correct
13 Correct 2346 ms 28312 KB Output is correct
14 Correct 2336 ms 28252 KB Output is correct
15 Correct 1967 ms 28144 KB Output is correct
16 Correct 3309 ms 28648 KB Output is correct
17 Correct 2844 ms 28504 KB Output is correct
18 Correct 3175 ms 28548 KB Output is correct
19 Correct 16 ms 21348 KB Output is correct
20 Correct 16 ms 21452 KB Output is correct
21 Runtime error 42 ms 43288 KB Execution killed with signal 6
22 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 365 ms 22348 KB Output is correct
2 Correct 1917 ms 28772 KB Output is correct
3 Correct 2798 ms 28496 KB Output is correct
4 Correct 3966 ms 29012 KB Output is correct
5 Correct 14 ms 21592 KB Output is correct
6 Correct 3733 ms 28616 KB Output is correct
7 Correct 351 ms 22432 KB Output is correct
8 Correct 2062 ms 28780 KB Output is correct
9 Correct 2778 ms 28496 KB Output is correct
10 Correct 3871 ms 29012 KB Output is correct
11 Correct 16 ms 21580 KB Output is correct
12 Correct 3324 ms 28492 KB Output is correct
13 Correct 2346 ms 28312 KB Output is correct
14 Correct 2336 ms 28252 KB Output is correct
15 Correct 1967 ms 28144 KB Output is correct
16 Correct 3309 ms 28648 KB Output is correct
17 Correct 2844 ms 28504 KB Output is correct
18 Correct 3175 ms 28548 KB Output is correct
19 Correct 361 ms 22448 KB Output is correct
20 Correct 1785 ms 28780 KB Output is correct
21 Correct 2792 ms 28472 KB Output is correct
22 Correct 3862 ms 29004 KB Output is correct
23 Correct 14 ms 21576 KB Output is correct
24 Correct 3277 ms 28616 KB Output is correct
25 Correct 2245 ms 28316 KB Output is correct
26 Correct 2094 ms 28252 KB Output is correct
27 Correct 1763 ms 28112 KB Output is correct
28 Correct 3608 ms 28644 KB Output is correct
29 Correct 3694 ms 28416 KB Output is correct
30 Correct 3890 ms 28552 KB Output is correct
31 Execution timed out 6011 ms 72112 KB Time limit exceeded
32 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 365 ms 22348 KB Output is correct
2 Correct 1917 ms 28772 KB Output is correct
3 Correct 2798 ms 28496 KB Output is correct
4 Correct 3966 ms 29012 KB Output is correct
5 Correct 14 ms 21592 KB Output is correct
6 Correct 3733 ms 28616 KB Output is correct
7 Correct 351 ms 22432 KB Output is correct
8 Correct 2062 ms 28780 KB Output is correct
9 Correct 2778 ms 28496 KB Output is correct
10 Correct 3871 ms 29012 KB Output is correct
11 Correct 16 ms 21580 KB Output is correct
12 Correct 3324 ms 28492 KB Output is correct
13 Correct 2346 ms 28312 KB Output is correct
14 Correct 2336 ms 28252 KB Output is correct
15 Correct 1967 ms 28144 KB Output is correct
16 Correct 3309 ms 28648 KB Output is correct
17 Correct 2844 ms 28504 KB Output is correct
18 Correct 3175 ms 28548 KB Output is correct
19 Correct 361 ms 22448 KB Output is correct
20 Correct 1785 ms 28780 KB Output is correct
21 Correct 2792 ms 28472 KB Output is correct
22 Correct 3862 ms 29004 KB Output is correct
23 Correct 14 ms 21576 KB Output is correct
24 Correct 3277 ms 28616 KB Output is correct
25 Correct 2245 ms 28316 KB Output is correct
26 Correct 2094 ms 28252 KB Output is correct
27 Correct 1763 ms 28112 KB Output is correct
28 Correct 3608 ms 28644 KB Output is correct
29 Correct 3694 ms 28416 KB Output is correct
30 Correct 3890 ms 28552 KB Output is correct
31 Execution timed out 6011 ms 72112 KB Time limit exceeded
32 Halted 0 ms 0 KB -