求hack
查看原帖
求hack
220824
yyz1005楼主2022/11/14 16:25

做法:

  • 建立队列 qq,将 tt 入队。

  • 每次取出队头

  • 所有能够到达队头的节点入读减一,同时求出该点到 tt 的距离

  • 节点入度为 00 则入队

只有 10pts

求 hack

Code:

#include<bits/stdc++.h>
using namespace std;
const int N = 10010;
const int M = 200010;
vector<int> vec[N];
int n,m;
int nxt[N];
int dis[N];
int s,t;
queue<int> q;
int main(){
    scanf("%d%d",&n,&m);
    for(int i = 1; i <= m; i++){
        int u,v;
        scanf("%d%d",&u,&v);
        if(u==v) continue;
        nxt[u]++;
        vec[v].push_back(u);
    }
    scanf("%d%d",&s,&t);
    q.push(t);
    memset(dis,0x3f,sizeof(dis));
    dis[t] = 0;
    while(!q.empty()){
        int fir = q.front();
        q.pop();
        for(auto v : vec[fir]){
            nxt[v]--;
            dis[v] = min(dis[v],dis[fir]+1);
            if(nxt[v]==0){
                q.push(v);
            }
        }
    }
    if(dis[s]!=0x3f3f3f3f) printf("%d",dis[s]);
    else printf("-1");
    return 0;
}
2022/11/14 16:25
加载中...