1 条题解

  • 0
    @ 2026-6-17 1:19:38

    // 多起点最短路+拼接优选 BFS 算法 O(N+M)
    #include <bits/stdc++.h>
    using namespace std;
    
    const int N=3005;
    vector<int> e[N]; 
    int n,m,s1,t1,s2,t2,ans=2e9;
    int d1[N],d2[N],d3[N];
    
    void bfs(int s,int*d){
      memset(d,0x3f,sizeof(d1)); d[s]=0;
      queue<int> q;
      q.push(s);
      while(!q.empty()){
        int u=q.front();q.pop();
        for(auto v:e[u]){
          if(d[v]>d[u]+1){
            d[v]=d[u]+1;
            q.push(v);
          }
        }
      }
    }
    int main(){
      scanf("%d%d",&n,&m);
      for(int i=1,x,y;i<=m;i++){
        scanf("%d%d",&x,&y);
        e[x].push_back(y);
        e[y].push_back(x);
      }
      
      scanf("%d%d%d%d",&s1,&t1,&s2,&t2);
      bfs(1,d1);
      if(d1[s1]>t1 || d1[s2]>t2){
        puts("-1"); return 0;
      }
      bfs(s1,d2); 
      bfs(s2,d3);
      for(int i=1;i<=n;i++)if(d1[i]+d2[i]<=t1&&d1[i]+d3[i]<=t2) 
        ans=min(ans,d1[i]+d2[i]+d3[i]);
      printf("%d",m-ans);
    }
    
    • 1

    D104 BFS最短路 P5683 [CSP-J2019 江西] 道路拆除

    信息

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