답안 #410771

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
410771 2021-05-23T17:27:01 Z AmineWeslati Amusement Park (JOI17_amusement_park) C++14
10 / 100
37 ms 9576 KB
#include "Joi.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int>vi; 
#define pb push_back
#define sz(v) (int)v.size()
#define all(x) begin(x),end(x)

#define FOR(i,a,b) for(int i=a; i<b; i++)
#define ROF(i,a,b) for(int i=b-1; i>=a; i--)

//------------------------------------------------//

const int MX=2e4+10;
const int LOG=60;

bitset<LOG>b;

int N; 
vi nei[MX];

vi par(MX),adj[MX],bit(MX),val(MX);
int cnt=-1;

vi viss(MX,0);

void dfs(int u, int p){
	viss[u]=1;
	par[u]=p;

	bit[u]=++cnt; bit[u]%=LOG;
	val[u]=b[bit[u]];

	for(int v: nei[u]) if(!viss[v]){
		adj[u].pb(v);
		dfs(v,u);
	}
}

void Joi(int N, int M, int A[], int B[], ll X, int T){
	::N=N; 
	FOR(i,0,M){
		int u=A[i],v=B[i];
		nei[u].pb(v);
		nei[v].pb(u);
	}
	FOR(i,0,LOG){
		b[i]=X%2;
		X/=2;
	}

	dfs(0,0);	

	FOR(i,0,N) MessageBoard(i,val[i]);
}
#include "Ioi.h"
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int>vi; 
#define pb push_back
#define sz(v) (int)v.size()
#define all(x) begin(x),end(x)

#define FOR(i,a,b) for(int i=a; i<b; i++)
#define ROF(i,a,b) for(int i=b-1; i>=a; i--)

//------------------------------------------------//

const int MX=2e4+10;
const int LOG=60;

vi nei2[MX];

vi par2(MX),adj2[MX],bit2(MX);
int cnt2=-1;


vi visss(MX,0);
void dfs2(int u, int p){
	visss[u]=1;
	par2[u]=p;

	bit2[u]=++cnt2; bit2[u]%=LOG;

	for(int v: nei2[u]) if(!visss[v]){
		adj2[u].pb(v);
		dfs2(v,u);
	}
}

vi ans(LOG),vis(MX,0);
set<int>s;
void explore(int u, int x){
	vis[u]=1;
	s.insert(bit2[u]);
	ans[bit2[u]]=x; 
	if(sz(s)>=LOG) return; 

	int all=1,none=1;
	for(int v: adj2[u]){
		if(!vis[v]) all=0;
		if(vis[v]) none=0;
	}
	if(all){
		explore(par2[u],Move(par2[u]));
	}
	else if(none){
		explore(adj2[u][0],Move(adj2[u][0]));
	}
	else{
		int idx=-1;
		FOR(i,0,sz(adj2[u])) if(vis[adj2[u][i]]){
			int idx=i;
			while(vis[adj2[u][idx]]){
				idx++; 
				idx%=sz(adj2[u]);
			}
			break;
		}
		assert(idx!=-1);

		explore(adj2[u][idx],Move(adj2[u][idx]));
	}
}

ll Ioi(int N, int M, int A[], int B[], int P, int V, int T){
	FOR(i,0,M){
		int u=A[i],v=B[i];
		nei2[u].pb(v);
		nei2[v].pb(u);
	}
	dfs2(0,0);

	explore(P,V);

	ll x=0;
	ROF(i,0,LOG){
		x*=2;
		x+=ans[i];
	}
	return x;
}
# 결과 실행 시간 메모리 Grader output
1 Runtime error 5 ms 4596 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 37 ms 9456 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 3052 KB Output is correct
2 Correct 3 ms 3052 KB Output is correct
3 Correct 4 ms 3060 KB Output is correct
4 Correct 5 ms 3612 KB Output is correct
5 Correct 5 ms 3692 KB Output is correct
6 Correct 5 ms 3616 KB Output is correct
7 Correct 5 ms 3608 KB Output is correct
8 Correct 5 ms 3608 KB Output is correct
9 Correct 16 ms 6548 KB Output is correct
10 Correct 15 ms 6540 KB Output is correct
11 Correct 16 ms 6492 KB Output is correct
12 Correct 3 ms 3052 KB Output is correct
13 Correct 3 ms 3056 KB Output is correct
14 Correct 3 ms 3060 KB Output is correct
15 Correct 4 ms 3052 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Runtime error 36 ms 9576 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 32 ms 9548 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -