2 条题解
-
1
经典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
跑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
- 上传者