답안 #933624

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
933624 2024-02-26T01:47:25 Z vjudge1 Speedrun (RMI21_speedrun) C++17
컴파일 오류
0 ms 0 KB
#include <bits/stdc++.h>
#include "speedrun.h"
using namespace std;
using vi = vector <int>;

void assignHints (int subtask, int n, int u[], int v[]) {
    if (subtask==1){setHintLen(n);
    for (int i = 1; i <= n-1; i++) {
        setHint(u[i], v[i], true);
        setHint(v[i], u[i], true);
    }
    return;
    }
    if (subtask==2) {
    setHintLen(20);
    int freq[n+1]{};
    for (int i=1; i <= n-1; i++) {
        freq[u[i]]++;
        freq[v[i]]++;
    }
    int u = max_element(freq, freq+n+1)-freq;
    for (int i=1; i <= n; i++) {
        for (int bit=0; bit < 20; bit++) {
            setHint(i, bit+1, u>>bit&1);
        }
    }
    return;}
    bool vis[n+5]{};
    vi adj[n+5];
    for (int i = 1; i <= n-1; i++) {
        adj[u[i]].push_back(v[i]);
        adj[v[i]].push_back(u[i]);
    }
    for (int i=1; i <= n-1; i++) {
        freq[u[i]]++;
        freq[v[i]]++;
    }
    int u = min_element(freq, freq+n+1)-freq;
    vis[u]=true;
    while (true) {
        int v=-16;
        for (int vv : adj[u]) {
            if (vis[vv]) continue;
            vis[vv]=true;
            v = vv;
            break;
        }
        if (v==-16) {
            for (int bit=0; bit < 20; bit++) {
                setHint(u, bit+1, u>>bit&1);
            }
            break;
        }
        for (int bit=0; bit < 20; bit++) {
            setHint(u, bit+1, v>>bit&1);
        }
        u=v;
    }
}

const static void dfs1 (int u, int par, int n) {
    for (int v = 1; v <= n; v++) {
        if (v == u) continue;
        if (v == par) continue;
        if (getHint(v)) {
            goTo(v);
            dfs1(v, u, n);
            goTo(u);
        }
    }
    return;
};

void speedrun (int subtask, int n, int at) {
    if (subtask==1) {dfs1(at, at, n); return;}
    if (subtask==2) {int root=0;
    for (int bit=0; bit < 20; bit++) {
        root |= getHint(bit+1)<<bit;
    }
    goTo(root);
    for (int u=1; u <= n; u++) {
        if (u==root)continue;
        goTo(u);
        goTo(root);
    }
    return;}
    bool vis[n+5]{};
    int to=0;
    while (true) {
        vis[at]=true;
        to=0;
        for (int bit=0; bit < 20; bit++) {
            to |= getHint(bit+1)>>bit;
        }
        if (!vis[to]) {
            goTo(to);
            at=to;
            to=0;
            continue;
        }
        bool die=true;
        for (int i = 1; i <= n; i++) {
            if (vis[u]) continue;
            if (!goTo(i)) continue;
            at=i;
            die=false;
            break;
        }
        if (die) break;
    }
    return;
}

Compilation message

speedrun.cpp: In function 'void assignHints(int, int, int*, int*)':
speedrun.cpp:35:9: error: 'freq' was not declared in this scope; did you mean 'free'?
   35 |         freq[u[i]]++;
      |         ^~~~
      |         free
speedrun.cpp:38:9: error: declaration of 'int u' shadows a parameter
   38 |     int u = min_element(freq, freq+n+1)-freq;
      |         ^
speedrun.cpp:6:43: note: 'int* u' previously declared here
    6 | void assignHints (int subtask, int n, int u[], int v[]) {
      |                                       ~~~~^~~
speedrun.cpp:38:25: error: 'freq' was not declared in this scope; did you mean 'free'?
   38 |     int u = min_element(freq, freq+n+1)-freq;
      |                         ^~~~
      |                         free
speedrun.cpp: In function 'void speedrun(int, int, int)':
speedrun.cpp:103:21: error: 'u' was not declared in this scope
  103 |             if (vis[u]) continue;
      |                     ^