1 条题解

  • 1
    @ 2026-9-27 17:50:34

    直接bfs即可。
    定义 visu,ivis_{u,i} 为在步数模3的余数为 ii 的情况下,可不可以到达 uu 号节点。

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    
    const int N = 1e6 + 10;
    int n, m;
    vector<vector<int>> g(N);
    int s, t;
    int vis[N][4];
    void bfs(int s){
        queue<pair<int, int>> q;
        q.push({s, 0});
        vis[s][0] = true;
        while(!q.empty()){
            int u = q.front().first;
            int step = q.front().second;
            q.pop();
            step++;
            for(auto v : g[u]){
                if(vis[v][step % 3] == false){
                    vis[v][step % 3] = true;
                    if(v == t && step % 3 == 0){
                        cout << step / 3;
                        exit(0);
                    }
                    q.push({v, step});
                }
            }
        }
    }
    signed main(){
        cin >> n >> m;
        for(int i = 1;i <= m;i++){
            int u, v;
            cin >> u >> v;
            g[u].push_back(v);
        }
        cin >> s >> t;
        bfs(s);
        cout << -1;
        return 0;
    }
    

    信息

    ID
    1738
    时间
    2000ms
    内存
    1024MiB
    难度
    提高
    标签
    递交数
    2
    通过
    2
    上传者