Submission #38547026


Source Code Expand

// LUOGU_RID: 101224846
#include <bits/stdc++.h>
using namespace std;

namespace vbzIO{
    char ibuf[(1 << 20) + 1], *iS, *iT;
    #if ONLINE_JUDGE
    #define gh() (iS == iT ? iT = (iS = ibuf) + fread(ibuf, 1, (1 << 20) + 1, stdin), (iS == iT ? EOF : *iS++) : *iS++)
    #else
    #define gh() getchar()
    #endif
    #define reg register
    #define pb push_back
    #define pi pair<int, int>
    #define fi first
    #define se second
    #define mp make_pair
    inline int read () {
        reg char ch = gh();
        reg long long x = 0;
        reg char t = 0;
        while (ch < '0' || ch > '9') t |= ch == '-', ch = gh();
        while (ch >= '0' && ch <= '9') x = (x << 1) + (x << 3) + (ch ^ 48), ch = gh();
        return t ? -x : x;
    }
    inline void write(int x) {
        if (x < 0) {
            x = ~(x - 1);
            putchar('-');
        }
        if (x > 9)
            write(x / 10);
        putchar(x % 10 + '0');
    }
}

using vbzIO::read;
using vbzIO::write;

const int maxn = 55;
int T, n, fa[maxn][2], vis[maxn], in[maxn], lf[maxn];
struct edge { int u, v; } e[maxn];
vector<int> a[maxn], b[maxn], g[maxn], leaf;

void init() {
    memset(fa, 0, sizeof(fa));
    memset(vis, 0, sizeof(vis));
    memset(in, 0, sizeof(in));
    for (int i = 1; i <= n; i++) g[i].clear();
}

void dfs(int u, int fat, int fl) {
    fa[u][fl] = fat;
    int flg = 0;
    for (int v : (!fl ? a[u] : b[u])) {
        flg++;
        if (v == fat) continue;
        dfs(v, u, fl);
    }
    if (flg == 1 && !fl) lf[u] = 1;
}

void solve() {
    n = read();
    for (int i = 1; i <= n; i++) b[i].clear(), a[i].clear(), lf[i] = 0;
    for (int i = 1, u, v; i <= n - 1; i++) {
        u = read(), v = read(), e[i] = { u, v };
        a[u].pb(v), a[v].pb(u);
    }
    for (int i = 1, u, v; i <= n - 1; i++) {
        u = read(), v = read();
        b[u].pb(v), b[v].pb(u);
    }
    init();
    dfs(1, 0, 0);
    dfs(1, 0, 1);
    int fl = 1;
    leaf.clear();
    for (int i = 1; i <= n; i++) 
        if (lf[i]) leaf.push_back(i);
    for (int i = 1; i <= n; i++) 
        if (fa[i][0] ^ fa[i][1]) fl = 0;
    if (fl) return puts("0"), void();
    int res = 1e9;
    for (int rt : leaf) {
        for (int nr = 1; nr <= n; nr++) {
            if (rt == nr) continue;
    // int rt = 3, nr = 1;
            for (int i = 1; i <= n; i++) a[i].clear();
            for (int i = 1; i <= n - 1; i++) {
                if (e[i].u == rt || e[i].v == rt) continue;
                a[e[i].u].pb(e[i].v), a[e[i].v].pb(e[i].u);
            }
            a[nr].pb(rt), a[rt].pb(nr);
            init(), dfs(rt, 0, 0), dfs(rt, 0, 1);
            // for (int i = 1; i <= n; i++) cout << fa[i][0] << " " << fa[i][1] << endl;
            int cnt = 0;
            for (int i = 1; i <= n; i++) 
                if (fa[i][0] ^ fa[i][1]) vis[i] = 1, cnt++;
            fl = 0;
            for (int i = 1; i <= n; i++) {
                if (!vis[i] && vis[fa[i][0]]) {
                    // cout << i << endl;
                    fl = 1;
                    break;
                }
            }
            // cout << cnt << endl;
            // if (fl) return puts("-1"), void();
            if (fl) continue;
            for (int i = 1; i <= n; i++) {
                if (!vis[i]) continue;
                if (vis[fa[i][0]]) g[i].pb(fa[i][0]), in[fa[i][0]]++;
                if (vis[fa[i][1]]) g[fa[i][1]].pb(i), in[i]++;
            }
            int sum = 0;
            queue<int> q;
            for (int i = 1; i <= n; i++) 
                if (vis[i] && !in[i]) q.push(i), sum++;
            while (!q.empty()) {
                int u = q.front(); q.pop();
                for (int v : g[u]) {
                    in[v]--;
                    if (!in[v]) q.push(v), sum++;
                }
            }
            if (sum != cnt) continue;
            // if (sum + 1 == 5) cout << rt << " " << nr << endl;
            res = min(res, sum + 1), fl = 1;
        }
    }
    write(res == 1e9 ? -1 : res);
    puts("");
}

int main() {
    T = read();
    while (T--) solve();
    return 0;
}

Submission Info

Submission Time
Task F - Grafting
User luogu_bot5
Language C++ (GCC 9.2.1)
Score 1900
Code Size 4229 Byte
Status AC
Exec Time 45 ms
Memory 3604 KiB

Compile Error

./Main.cpp: In function ‘int vbzIO::read()’:
./Main.cpp:19:18: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
   19 |         reg char ch = gh();
      |                  ^~
./Main.cpp:20:23: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
   20 |         reg long long x = 0;
      |                       ^
./Main.cpp:21:18: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
   21 |         reg char t = 0;
      |                  ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1900 / 1900
Status
AC × 2
AC × 32
Set Name Test Cases
Sample sample_01.txt, sample_02.txt
All sample_01.txt, sample_02.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt
Case Name Status Exec Time Memory
sample_01.txt AC 7 ms 3432 KiB
sample_02.txt AC 2 ms 3512 KiB
test_01.txt AC 41 ms 3456 KiB
test_02.txt AC 36 ms 3388 KiB
test_03.txt AC 35 ms 3508 KiB
test_04.txt AC 37 ms 3592 KiB
test_05.txt AC 34 ms 3600 KiB
test_06.txt AC 37 ms 3504 KiB
test_07.txt AC 39 ms 3600 KiB
test_08.txt AC 36 ms 3596 KiB
test_09.txt AC 36 ms 3592 KiB
test_10.txt AC 38 ms 3456 KiB
test_11.txt AC 17 ms 3580 KiB
test_12.txt AC 16 ms 3560 KiB
test_13.txt AC 16 ms 3540 KiB
test_14.txt AC 19 ms 3376 KiB
test_15.txt AC 15 ms 3456 KiB
test_16.txt AC 15 ms 3380 KiB
test_17.txt AC 17 ms 3584 KiB
test_18.txt AC 8 ms 3436 KiB
test_19.txt AC 10 ms 3492 KiB
test_20.txt AC 16 ms 3524 KiB
test_21.txt AC 43 ms 3548 KiB
test_22.txt AC 36 ms 3444 KiB
test_23.txt AC 42 ms 3604 KiB
test_24.txt AC 44 ms 3400 KiB
test_25.txt AC 40 ms 3596 KiB
test_26.txt AC 44 ms 3444 KiB
test_27.txt AC 39 ms 3448 KiB
test_28.txt AC 41 ms 3452 KiB
test_29.txt AC 44 ms 3448 KiB
test_30.txt AC 45 ms 3452 KiB