提出 #67419508


ソースコード 拡げる

#include <bits/stdc++.h>
#define ll long long
using namespace std;

const int N = 3e3 + 10;

int n, fa[N], dep[N];
vector<int> e[N], a[N];
bool v[N][N];
string s;
int f[N], f2[N];
int ans;
int tp; pair<int, int> sta[N * N];

int times;

int findfa(int x) {
    return x == f[x] ? x : f[x] = findfa(f[x]);
}
int findfa2(int x) {
    return x == f2[x] ? x : f2[x] = findfa2(f2[x]);
}
void merge(int x, int y) {
    while (findfa2(x) != findfa2(y)) {
        times++;
        f[findfa(x)] = findfa(y);
        f2[findfa2(x)] = findfa2(y);
        if (dep[x] == 1) break;
        x = fa[x], y = fa[y];
    }
}

void dfs(int x) {
    for (int y : a[dep[x]]) if (v[x][y]) {
        merge(x, y);
    }
    for (int y : e[x]) {
        if (y == fa[x]) continue;
        fa[y] = x;
        dep[y] = dep[x] + 1;
        dfs(y);
    }
}
void dfs2(int x) {
    a[dep[x]].push_back(x);
    for (int y : e[x]) {
        if (y != fa[x]) {
            dfs2(y);
        }
    }
}
void dfs3(int x) {
    for (int y : a[dep[x]]) if (findfa(x) == findfa(y)) {
        if (dep[x] == 0 || v[fa[x]][fa[y]]) {
            v[x][y] = 1;
            ans += 2;
            sta[++tp] = {x, y};
        }
    }
    for (int y : e[x]) {
        if (y == fa[x]) continue;
        fa[y] = x;
        dep[y] = dep[x] + 1;
        dfs3(y);
    }
}

int main() {
    // freopen("big.in", "r", stdin);
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> n;
    for (int i = 1; i < n; i++) {
        int x, y;
        cin >> x >> y;
        e[x].push_back(y);
        e[y].push_back(x);
    }
    for (int i = 1; i <= n; i++) {
        cin >> s; s = "#" + s;
        for (int j = 1; j <= n; j++) {
            v[i][j] = s[j] - '0';
        }
    }
    for (int i = 1; i <= n; i++) f[i] = i;
    for (int x = 1; x <= n; x++) {
        for (int i = 0; i <= n; i++) {
            a[i].clear();
            fa[i] = dep[i] = 0;
            f2[i] = i;
        }
        for (int y : e[x]) {
            fa[y] = x;
            dep[y] = 1;
            dfs(y);
            dfs2(y);
        }
    }
    for (int x = 1; x <= n; x++) for (int y : e[x]) if (x < y) {
        for (int i = 0; i <= n; i++) {
            a[i].clear();
            fa[i] = dep[i] = 0;
            f2[i] = i;
        }
        fa[x] = y, fa[y] = x;
        dep[x] = dep[y] = 1;
        dfs(x);
        dfs2(x);
        dfs(y);
    }
    ans = n;
    memset(v, 0, sizeof(v));
    for (int x = 1; x <= n; x++) {
        for (int i = 0; i <= n; i++) {
            fa[i] = dep[i] = 0;
            a[i].clear();
        }
        v[x][x] = 1;
        for (int y : e[x]) {
            fa[y] = x; dep[y] = 1;
            dfs3(y);
            dfs2(y);
        }
        v[x][x] = 0;
        while (tp) {
            v[sta[tp].first][sta[tp].second] = 0;
            tp--;
        }
    }
    for (int x = 1; x <= n; x++) for (int y : e[x]) if (x < y) {
        for (int i = 0; i <= n; i++) {
            a[i].clear();
            fa[i] = dep[i] = 0;
        }
        fa[x] = y, fa[y] = x;
        dfs3(x);
        dfs2(x);
        dfs3(y);
        while (tp) {
            v[sta[tp].first][sta[tp].second] = 0;
            tp--;
        }
    }
    cout << ans << "\n";
    return 0;
}

提出情報

提出日時
問題 D - Many Palindromes on Tree
ユーザ Celebrate
言語 C++ 20 (gcc 12.2)
得点 700
コード長 3366 Byte
結果 AC
実行時間 1545 ms
メモリ 47864 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 700 / 700
結果
AC × 3
AC × 85
セット名 テストケース
Sample example_00.txt, example_01.txt, example_02.txt
All example_00.txt, example_01.txt, example_02.txt, test_00.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, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt, test_51.txt, test_52.txt, test_53.txt, test_54.txt, test_55.txt, test_56.txt, test_57.txt, test_58.txt, test_59.txt, test_60.txt, test_61.txt, test_62.txt, test_63.txt, test_64.txt, test_65.txt, test_66.txt, test_67.txt, test_68.txt, test_69.txt, test_70.txt, test_71.txt, test_72.txt, test_73.txt, test_74.txt, test_75.txt, test_76.txt, test_77.txt, test_78.txt, test_79.txt, test_80.txt, test_81.txt
ケース名 結果 実行時間 メモリ
example_00.txt AC 4 ms 12388 KiB
example_01.txt AC 4 ms 12392 KiB
example_02.txt AC 5 ms 12396 KiB
test_00.txt AC 4 ms 12392 KiB
test_01.txt AC 704 ms 12644 KiB
test_02.txt AC 130 ms 12468 KiB
test_03.txt AC 5 ms 12376 KiB
test_04.txt AC 99 ms 12504 KiB
test_05.txt AC 931 ms 12748 KiB
test_06.txt AC 969 ms 12668 KiB
test_07.txt AC 948 ms 12600 KiB
test_08.txt AC 956 ms 12600 KiB
test_09.txt AC 989 ms 12668 KiB
test_10.txt AC 958 ms 12572 KiB
test_11.txt AC 958 ms 12612 KiB
test_12.txt AC 957 ms 12676 KiB
test_13.txt AC 955 ms 12688 KiB
test_14.txt AC 958 ms 12672 KiB
test_15.txt AC 945 ms 12608 KiB
test_16.txt AC 1444 ms 13104 KiB
test_17.txt AC 1446 ms 12904 KiB
test_18.txt AC 1432 ms 13040 KiB
test_19.txt AC 1417 ms 12968 KiB
test_20.txt AC 1451 ms 13012 KiB
test_21.txt AC 1439 ms 13100 KiB
test_22.txt AC 1441 ms 12956 KiB
test_23.txt AC 1474 ms 13028 KiB
test_24.txt AC 1450 ms 13036 KiB
test_25.txt AC 1450 ms 12928 KiB
test_26.txt AC 1246 ms 12784 KiB
test_27.txt AC 1256 ms 12780 KiB
test_28.txt AC 1254 ms 12792 KiB
test_29.txt AC 1255 ms 12812 KiB
test_30.txt AC 1255 ms 12764 KiB
test_31.txt AC 315 ms 12520 KiB
test_32.txt AC 299 ms 12540 KiB
test_33.txt AC 263 ms 12572 KiB
test_34.txt AC 280 ms 12592 KiB
test_35.txt AC 293 ms 12660 KiB
test_36.txt AC 281 ms 12656 KiB
test_37.txt AC 1024 ms 13260 KiB
test_38.txt AC 1044 ms 13028 KiB
test_39.txt AC 1035 ms 13412 KiB
test_40.txt AC 1044 ms 13100 KiB
test_41.txt AC 1019 ms 13304 KiB
test_42.txt AC 1526 ms 13108 KiB
test_43.txt AC 1532 ms 13020 KiB
test_44.txt AC 1378 ms 12900 KiB
test_45.txt AC 1361 ms 12944 KiB
test_46.txt AC 1375 ms 12808 KiB
test_47.txt AC 336 ms 47844 KiB
test_48.txt AC 341 ms 47760 KiB
test_49.txt AC 328 ms 22176 KiB
test_50.txt AC 324 ms 22420 KiB
test_51.txt AC 1026 ms 13184 KiB
test_52.txt AC 1039 ms 13344 KiB
test_53.txt AC 1012 ms 13060 KiB
test_54.txt AC 1542 ms 13020 KiB
test_55.txt AC 1517 ms 13020 KiB
test_56.txt AC 1353 ms 12948 KiB
test_57.txt AC 1357 ms 12812 KiB
test_58.txt AC 324 ms 47644 KiB
test_59.txt AC 343 ms 47864 KiB
test_60.txt AC 334 ms 22420 KiB
test_61.txt AC 332 ms 22724 KiB
test_62.txt AC 997 ms 13388 KiB
test_63.txt AC 983 ms 13172 KiB
test_64.txt AC 994 ms 13288 KiB
test_65.txt AC 1442 ms 13036 KiB
test_66.txt AC 1453 ms 13032 KiB
test_67.txt AC 1447 ms 12932 KiB
test_68.txt AC 1008 ms 13204 KiB
test_69.txt AC 1021 ms 13192 KiB
test_70.txt AC 1018 ms 13240 KiB
test_71.txt AC 1029 ms 13296 KiB
test_72.txt AC 1024 ms 13340 KiB
test_73.txt AC 1363 ms 12932 KiB
test_74.txt AC 1367 ms 12804 KiB
test_75.txt AC 1368 ms 12900 KiB
test_76.txt AC 1513 ms 13036 KiB
test_77.txt AC 1533 ms 13032 KiB
test_78.txt AC 1545 ms 12952 KiB
test_79.txt AC 1385 ms 13024 KiB
test_80.txt AC 1388 ms 12968 KiB
test_81.txt AC 1382 ms 12944 KiB