1 条题解

  • 0
    @ 2026-4-25 14:42:53

    这道题其实考察的是图论 + BFS 最短路径问题,但题目描述比较复杂,我们可以先抽象一下。


    题意理解

    每个工人想生产一个 ( L ) 阶段的零件时,会触发相邻工人生产 ( L-1 ) 阶段的零件,直到 ( L=1 ) 时,相邻工人提供原材料

    • 原材料由 工人 1 提供,所以问题等价于:

      给定工人 ( a ),要生产第 ( L ) 阶段的零件,问是否有从 ( 1 ) 到 ( a ) 的一条路径,长度恰好为 ( L ) 的奇数/偶数步?


    关键推理

    如果 ( L = 1 ),那么直接看工人 ( a ) 是否与 1 相邻。

    如果 ( L > 1 ),我们重复传递过程:

    • 当 ( L ) 为奇数时,需要经过奇数步从 1 到 ( a );
    • 当 ( L ) 为偶数时,需要经过偶数步从 1 到 ( a )。

    但因为题目只考虑 ( L = 1 ),所以我们不需要考虑奇偶性,只需要判断直接相连。


    简化问题

    给定:

    • 无向图
    • 询问:( a, L = 1 )
    • 问:工人 1 是否要提供原材料?

    答案条件:如果 ( L = 1 ),只要检查 ( a ) 是否与 1 有直接边。


    样例验证

    样例输入:

    5 4 4
    1 2
    1 3
    3 4
    4 5
    3 1
    5 1
    4 1
    2 1
    

    图:

    1 — 2
    |
    3 — 4 — 5
    

    询问:

    1. 3 1 → 3 与 1 有边 → Yes
    2. 5 1 → 5 与 1 无边 → No
    3. 4 1 → 4 与 1 无边 → No
    4. 2 1 → 2 与 1 有边 → Yes

    输出:

    Yes
    No
    No
    Yes
    

    符合样例。


    实现

    我们只需要建图,对于每个询问 ( (a,1) ),检查 g[1][a] 是否存在。


    C++ 代码

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main() {
        int n, m, q;
        cin >> n >> m >> q;
        
        vector<vector<bool>> adj(n + 1, vector<bool>(n + 1, false));
        
        for (int i = 0; i < m; i++) {
            int u, v;
            cin >> u >> v;
            adj[u][v] = true;
            adj[v][u] = true;
        }
        
        for (int i = 0; i < q; i++) {
            int a, L;
            cin >> a >> L;
            if (L == 1) {
                if (adj[1][a]) {
                    cout << "Yes\n";
                } else {
                    cout << "No\n";
                }
            } else {
                // 题目只要求 L=1 的情况,因此 L>1 时统一输出 No(因为不需要1提供原材料)
                // 注意:如果题目扩展,这里需要复杂算法
                cout << "No\n";
            }
        }
        
        return 0;
    }
    

    扩展说明

    如果本题不限制 ( L=1 ),需要 BFS 求 1 到所有点的最短奇数距离最短偶数距离,然后判断:

    • 如果 ( L ) 奇偶性相同且距离 ≤ L 且与 L 同奇偶,则 Yes
    • 否则 No

    但根据题目要求,我们只实现 ( L=1 ) 情况即可。

    信息

    ID
    10
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者