Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<string>
- #include<map>
- #include <queue>
- #include<vector>
- using namespace std;
- long n,m,s1,t1,l1,s2,t2,l2,p[100001]; vector <int> g[100001];
- long d[5][100001];queue <int> q; bool used[1000001];
- void bfs(int v,int ind){
- q.push(v); p[v]=-1;used[v]=1;
- while(!q.empty()){
- int w=q.front();
- q.pop();
- for (int k=0;k<g[w].size();++k){
- int t=g[w][k];
- if (!used[t]){
- used[t]=true;
- q.push(t);
- d[ind][t]=d[ind][w]+1;
- p[t]=w;
- }
- }
- }
- }
- vector <int> a,b;
- int main(){
- //freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
- cin>>n>>m;
- for (int k=1;k<=m;++k) {
- long a,b;
- cin>>a>>b;
- g[a].push_back(b);
- g[b].push_back(a);
- }
- cin>>s1>>t1>>l1>>s2>>t2>>l2;
- bfs(s1,0);
- long k=t1;
- while (k>=1){
- a.push_back(k);
- k=p[k];
- }
- for (int k=0;k<=n;++k) used[k]=0;
- bfs(s2,1);
- k=t2;
- while (k>=1){
- // cout<<k<<endl;
- b.push_back(k);
- k=p[k];
- }
- long z=d[0][t1]+d[1][t2];
- if (d[0][t1]>l1 || d[1][t2]>l2) z=1000000;
- if ((d[0][t1]==0 && s1!=t1)|| (s2!=t2&&d[1][t2]==0)) {
- cout<<-1;
- return 0;
- }
- // cout<<z;return 0;
- long p1=d[1][s1]+d[0][t1];
- if (d[0][t1]>l1) p1+=10000000;
- long minx=1000000,j=-1;
- for (int k=0;k<=n;++k) used[k]=0;
- bfs(t2,2);
- for (int k=0;k<a.size();++k) {
- if (minx>d[2][a[k]]) j=a[k];
- minx=min(minx,d[2][a[k]]);}
- if (d[1][s1]+d[0][j]+d[2][j]<=l2 && j!=-1)
- z=min(z,p1+minx);
- p1=d[0][s2]+d[1][t2];
- if (d[1][t2]>l2) p1+=100000000;
- for (int k=0;k<=n;++k) used[k]=0;
- bfs(t1,3);
- minx=1000000,j=-1;
- for (int k=0;k<b.size();++k) {
- if (minx>d[3][b[k]]) j=b[k];
- minx=min(minx,d[3][b[k]]);}
- // cout<<d[3][j];return 0;
- if (d[0][s2]+d[1][j]+d[3][j]<=l1 && j!=-1)
- z=min(z,p1+minx);
- if (m>=z) cout<<m-z; else cout<<-1;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement