답안 #946989

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
946989 2024-03-15T09:27:30 Z mansur Amusement Park (JOI17_amusement_park) C++17
10 / 100
24 ms 6188 KB
#include "Joi.h"
#include<bits/stdc++.h>	

using namespace std;

#define all(a) a.begin(), a.end()                                                   
#define rall(a) a.rbegin(), a.rend()                 
#define sz(a) (int)a.size()
#define s second
#define f first
 
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int NN = 1e4;

int d[2][NN];
vector<int> g[NN];

int get(int x, int k, int n) {
	for (int i = 0; i < n; i++) d[k][i] = -1;
	queue<int> q;
	q.push(x);
	int mx = x;
	d[k][x] = 0;
	while (sz(q)) {
		x = q.front();
		q.pop();
		for (int to: g[x]) {
			if (d[k][to] == -1) {
				d[k][to] = d[k][x] + 1;
				q.push(to);
			}
		}
	}
	for (int i = 0; i < n; i++) {
		if (d[k][i] > d[k][mx]) {
			mx = i;
		}
	}
	return mx;
}

int cur, was[NN], dpt[NN];
vector<pii> s[NN];

void dfs(int u) {
    was[u] = 1;
	for (int to: g[u]) {
		if (was[to]) continue;
		dfs(to);
		dpt[u] = max(dpt[u], dpt[to] + 1);
		s[u].push_back({dpt[to], to});
	}
	sort(rall(s[u]));
}

ll x;

void mrk(int u) {
	MessageBoard(u, (x >> cur & 1));
	cur++;
	for (auto to: s[u]) mrk(to.s);		
}

void Joi(int N, int M, int A[], int B[], long long X, int T) {	
	x = X;
	for (int i = 0; i < M; i++) {
		g[A[i]].push_back(B[i]);
		g[B[i]].push_back(A[i]);
	}
	int a = get(0, 0, N);
	int b = get(a, 1, N);
	if (d[1][b] < 59) {
		dfs(1);
		mrk(1);
		return;
	}
	for (int i = 0; i < N; i++) {
		d[1][i] %= 60;
		MessageBoard(i, (X >> d[1][i] & 1));
	}
}
#include "Ioi.h"
#include<bits/stdc++.h>	

using namespace std;

#define all(a) a.begin(), a.end()                                                   
#define rall(a) a.rbegin(), a.rend()                 
#define sz(a) (int)a.size()
#define s second
#define f first
 
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int Nn = 1e4;

int dd[2][Nn], nxt[Nn], prv[Nn];
vector<int> gg[Nn];

int gett(int x, int k, int n) {
	for (int i = 0; i < n; i++) dd[k][i] = -1;
	queue<int> q;
	q.push(x);
	int s = x;
	dd[k][x] = 0;
	while (sz(q)) {
		x = q.front();
		q.pop();
		for (int to: gg[x]) {
			if (dd[k][to] == -1) {
				dd[k][to] = dd[k][x] + 1;
				prv[to] = x;
				q.push(to);
			}
		}
	}
	int mx = s;
	for (int i = 0; i < n; i++) {
		if (dd[k][i] > dd[k][mx]) {
			mx = i;
		}
	}
	int v = mx;
	while (mx != s) {
		nxt[prv[mx]] = mx;
		mx = prv[mx];	
	}
	return v;
}

vector<pii> h[Nn];
int dt[Nn], wes[Nn];
ll vl[Nn], cr, cnt;
ll ans, pr[Nn];

void dffs(int u) {
    wes[u] = 1;
	for (int to: gg[u]) {
		if (wes[to]) continue;
		pr[to] = u;
		dffs(to);
		dt[u] = max(dt[u], dt[to] + 1);
		h[u].push_back({dt[to], to});
	}
	sort(rall(h[u]));
}

void mrkk(int u) {
	vl[u] = cr++;
	for (auto to: h[u]) mrkk(to.s);		
}

int vv;

void git(int u) {
	if (vl[u] < 60) {
		ans += (1ll << vl[u]) * vv;
		cnt++;
	}
	reverse(all(h[u]));
	for (auto to: h[u]) {
		if (vl[to.s] < 60) {
			vv = Move(to.s);
			git(to.s);
		}
	}
	if (cnt == 60) return;
	vv = Move(pr[u]);
	git(pr[u]);
}

long long Ioi(int N, int M, int A[], int B[], int p, int v, int T) {
	for (int i = 0; i < M; i++) {
		gg[A[i]].push_back(B[i]);
		gg[B[i]].push_back(A[i]);
	}
	int a = gett(0, 0, N);
	int b = gett(a, 1, N);
	if (dd[1][b] < 59) {
		dffs(1);
		vv = v;
		git(p);
		return ans;		
	}
	for (int i = 1; i <= 60; i++) {
		ll b = (dd[1][p] % 60);
		if (v) ans += (1ll << b);
		bool ok = 0;
		for (int to: gg[p]) {
			if (dd[1][to] + 1 == dd[1][p]) {
				v = Move(to);
				p = to;
				ok = 1;
				break;
			}
		}  
		if (!ok) {
			ans = 0;                                                                                          			
			for (ll j = 0; j < 60; j++) {
				ans += (1ll << j) * v;
				v = Move(nxt[p]);
				p = nxt[p];
			}
			return ans;
		}
	}
	return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 1808 KB Wrong Answer [7]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 24 ms 6156 KB Wrong Answer [7]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 1812 KB Output is correct
2 Correct 1 ms 1824 KB Output is correct
3 Correct 1 ms 1824 KB Output is correct
4 Correct 3 ms 1856 KB Output is correct
5 Correct 2 ms 1860 KB Output is correct
6 Correct 2 ms 1864 KB Output is correct
7 Correct 2 ms 1856 KB Output is correct
8 Correct 2 ms 1864 KB Output is correct
9 Correct 8 ms 3392 KB Output is correct
10 Correct 8 ms 3384 KB Output is correct
11 Correct 8 ms 3384 KB Output is correct
12 Correct 1 ms 1812 KB Output is correct
13 Correct 1 ms 1812 KB Output is correct
14 Correct 1 ms 1816 KB Output is correct
15 Correct 2 ms 1812 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 19 ms 6188 KB Wrong Answer [7]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 24 ms 6172 KB Wrong Answer [7]
2 Halted 0 ms 0 KB -