2 条题解

  • 1
    @ 2026-3-8 11:04:36

    经典bfs

    #include<bits/stdc++.h> 
    using namespace std;
    int n,m;
    vector<int>G[210000];
    queue<int>Q;
    int b[210000];
    int main(){
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=m;i++){
    		int x,y;
    		scanf("%d%d",&x,&y);
    		G[x].emplace_back(y);
    	}
    	Q.emplace(1);
    	b[1]=0;
    	while(Q.size()){
    		int x=Q.front();
    		Q.pop();
    		for(auto y:G[x])if(!b[y]){
    			Q.emplace(y);
    			b[y]=b[x]+1;
    		}
    	}
    	if(b[1]==0)printf("-1");
    	else printf("%d",b[1]);
    }
    
    • 1
      @ 2025-12-11 21:08:12

      跑dijkstra最短路即可

      #include<bits/stdc++.h>
      using namespace std;
      const int N=2e5+10;
      int d[N],v[N];vector<int>G[N];
      #define PII pair<int,int>
      #define fi first
      #define se second
      void dij()
      {
      	memset(d,0x3f,sizeof(d));
      	priority_queue<PII,vector<PII>,greater<PII> >q;
      	q.push({0,1});v[1]=1;d[1]=0;
      	while(!q.empty())
      	{
      		int x=q.top().se;q.pop();
      		for(int y:G[x])
      		{
      			if(d[y]>d[x]+1)
      			{
      				d[y]=d[x]+1;
      				if(!v[y]){v[y]=1;q.push({d[y],y});}
      			}
      			if(y==1){cout<<d[x]+1;exit(0);}
      		}
      	}
      }
      int main()
      {
      	int n,m;cin>>n>>m;
      	for(int i=1;i<=m;i++)
      	{
      		int x,y;cin>>x>>y;
      		G[x].push_back(y);
      	}
      	dij();cout<<-1;
      	return 0; 
      }
      
      • 1

      信息

      ID
      7918
      时间
      2000ms
      内存
      1024MiB
      难度
      6
      标签
      递交数
      38
      已通过
      12
      上传者