1 条题解
-
0

// 多起点最短路+拼接优选 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
信息
- ID
- 12498
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 3
- 上传者