提出 #73929150


ソースコード 拡げる

/*Sin_qwq's code
We can be heros , just for one day .*/
#include <bits/stdc++.h>
#define LD long double
#define i7 __int128
#define re return
#define con continue
#define ci const int
#define all(x) x.begin(), x.end()
#define All(x) x.begin() + 1, x.end()
using namespace std;
typedef long long i64;
template <class T>
inline bool ckmin(T &a, T b) { re b < a ? a = b, 1 : 0; }
template <class T>
inline bool ckmax(T &a, T b) { re a < b ? a = b, 1 : 0; }

vector<string> ans;
vector<int> a;
map<int, int> cnt;
vector<vector<int>> adj;
bool has_dup; // 标记当前路径是否已有重复

// 新增:回溯时恢复has_dup的状态
void dfs(int u, int parent)
{
    bool cur_dup = false;        // 记录当前节点是否导致重复
    bool prev_has_dup = has_dup; // 保存进入节点前的has_dup状态

    // 第一步:判断当前节点的答案
    if (has_dup)
    {
        // 路径已有重复,直接输出Yes
        ans[u] = "Yes";
    }
    else
    {
        if (cnt[a[u]] >= 1)
        {
            // 当前节点数值重复,标记路径有重复
            ans[u] = "Yes";
            has_dup = true;
            cur_dup = true;
        }
        else
        {
            // 无重复
            ans[u] = "No";
        }
    }

    // 第二步:将当前节点加入计数
    cnt[a[u]]++;

    // 第三步:遍历子节点
    for (auto v : adj[u])
    {
        if (v != parent)
        {
            dfs(v, u);
        }
    }

    // 第四步:回溯
    cnt[a[u]]--;
    if (cnt[a[u]] == 0)
    {
        cnt.erase(a[u]);
    }
    // 恢复has_dup:只有当前节点导致的重复,才恢复
    if (cur_dup)
    {
        has_dup = prev_has_dup;
    }
}

void work()
{
    int n;
    cin >> n;
    ans.resize(n + 1);
    a.resize(n + 1);
    adj.resize(n + 1);
    has_dup = false; // 初始路径无重复

    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }

    for (int i = 1; i <= n - 1; i++)
    {
        int u, v;
        cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }

    dfs(1, -1);

    for (int i = 1; i <= n; i++)
    {
        cout << ans[i] << '\n';
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr); // 加速输出
    int T = 1;
    // cin>>T;
    while (T--)
    {
        work();
    }
    re 0;
}

提出情報

提出日時
問題 D - Integer-duplicated Path
ユーザ Sin_qwq
言語 C++23 (GCC 15.2.0)
得点 400
コード長 2482 Byte
結果 AC
実行時間 257 ms
メモリ 52348 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 400 / 400
結果
AC × 3
AC × 47
セット名 テストケース
Sample sample_01.txt, sample_02.txt, sample_03.txt
All hack_01.txt, hack_02.txt, hack_03.txt, hack_04.txt, hack_05.txt, hack_06.txt, sample_01.txt, sample_02.txt, sample_03.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
ケース名 結果 実行時間 メモリ
hack_01.txt AC 189 ms 38680 KiB
hack_02.txt AC 193 ms 38712 KiB
hack_03.txt AC 60 ms 24856 KiB
hack_04.txt AC 59 ms 24764 KiB
hack_05.txt AC 131 ms 36252 KiB
hack_06.txt AC 134 ms 36244 KiB
sample_01.txt AC 2 ms 6344 KiB
sample_02.txt AC 2 ms 6456 KiB
sample_03.txt AC 2 ms 6344 KiB
test_01.txt AC 2 ms 6408 KiB
test_02.txt AC 2 ms 6404 KiB
test_03.txt AC 257 ms 52320 KiB
test_04.txt AC 253 ms 52188 KiB
test_05.txt AC 242 ms 52348 KiB
test_06.txt AC 208 ms 48328 KiB
test_07.txt AC 87 ms 42824 KiB
test_08.txt AC 81 ms 42940 KiB
test_09.txt AC 62 ms 24800 KiB
test_10.txt AC 63 ms 24920 KiB
test_11.txt AC 60 ms 25036 KiB
test_12.txt AC 59 ms 24852 KiB
test_13.txt AC 60 ms 24912 KiB
test_14.txt AC 50 ms 25036 KiB
test_15.txt AC 89 ms 24144 KiB
test_16.txt AC 90 ms 24176 KiB
test_17.txt AC 89 ms 24144 KiB
test_18.txt AC 89 ms 24252 KiB
test_19.txt AC 68 ms 24288 KiB
test_20.txt AC 64 ms 24156 KiB
test_21.txt AC 77 ms 25660 KiB
test_22.txt AC 75 ms 24560 KiB
test_23.txt AC 72 ms 25228 KiB
test_24.txt AC 73 ms 25404 KiB
test_25.txt AC 62 ms 24760 KiB
test_26.txt AC 61 ms 25660 KiB
test_27.txt AC 233 ms 45068 KiB
test_28.txt AC 188 ms 32880 KiB
test_29.txt AC 218 ms 44536 KiB
test_30.txt AC 186 ms 41328 KiB
test_31.txt AC 75 ms 34356 KiB
test_32.txt AC 75 ms 36704 KiB
test_33.txt AC 189 ms 35132 KiB
test_34.txt AC 222 ms 45488 KiB
test_35.txt AC 198 ms 39932 KiB
test_36.txt AC 138 ms 27088 KiB
test_37.txt AC 83 ms 40116 KiB
test_38.txt AC 69 ms 28572 KiB