# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
933606 | vjudge1 | Speedrun (RMI21_speedrun) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
void assignHints(int subtask, int N , int A[], int B[]){
setHintlen(20);
vi cont(N+2, 0),graph[N+2];
fore(i,1,N){graph[A[i]].pb(B[i]); graph[B[i]].pb(A[i]);
if(subtask == 1){
setHint(A[i], B[i], 1);
setHint(B[i], A[i], 1);
}else if(subtask == 2){
cont[A[i]]++;cont[B[i]]++;
}
}
if(subtask==2){
if(N==1)return;
fore(i,1,N){
if(cont[i]>1){
setHint(i, 1, 1);
setHint(i, 2, 1);
}else{// no es el centro
setHint(i, 1, 1);
}
}
}else if (subtask == 3){
fore(i,1,N){bool ini = 1;
for(int v : graph[i]){
fo(j,10){
int k = j+(!ini ? 10 : 0 );
setHint(i, k, (v&(1<<k) ? 1 : 0));
}
ini = 0;
}
}
}
}
vector<vector<int>> graph;
vector<bool> precalc, vis;int szn;
void dfs(int nodo, int donde = 0){
if(!precalc[nodo]){
precalc[nodo] = 1;
fore(i,1,szn+1){
if(getHint(i)){
graph[nodo].pb(i);
}
}
}
for(int v : graph[nodo]){
if(!vis[v]){
vis[v]=1;
goTo(v);dfs(v, nodo);
}
}
if(donde == 0)return ;
goTo(donde);
}
void speedrun(int subtask, int N, int start){if(N==1)return;
vis.resize(N+2,0);precalc.resize(N+2,0);szn=N;
graph.resize(N+2);getLength();
if(subtask == 2){
int num = 0;
fore(i,1,N+1){
if(getHint(i))num++;
}
if(num>=2){
fore(i,1,N+1){if(i==start)continue;
goTo(i);
goTo(start);
}
}else{
int p = 0;
fore(i,1,N+1)if(i!=start and goTo(i)){p=i;break;}
fore(i,1,N+1){if(i==p || i==start) continue;
goTo(i);goTo(p);
}
}
return;
}else if(subtask == 3 ){
return;
}
vis[start] = 1;
dfs(start);
}