Dfs写炸了
查看原帖
Dfs写炸了
865793
better_Z楼主2023/8/26 21:09
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=310;
vector<int>q[maxn];
int s1,t1,s2,t2,f[maxn],vis[maxn],dis[maxn]={1};
int n,m,a,b,ans,sum;
void dfs(int from,int to){
    f[to]=from;
    for(int i=0,k=q[to].size();i<k;i++){
        int next=q[to][i];
        if(next==from||dis[next]==0)continue;
        ans++;
        vis[to]=min(vis[from]+1,vis[to]);
        dfs(to,next);
    }
}
int main(){
    cin>>n>>m;
    vis[0]=0;vis[1]=0;
    for(int i=1;i<=m;i++){
        cin>>a>>b;
        q[a].push_back(b);
        q[b].push_back(a);
    }
    cin>>s1>>t1>>s2>>t2;
    memset(vis,0xFF,sizeof(vis));
    dfs(0,1);
    memset(dis,0,sizeof(dis));
    if((vis[s1]>t1)||(vis[s2]>t2)){
        cout<<-1;
        return 0;
    }
    for(int i=s1;i;i=f[i])dis[i]=1;
    for(int i=s2;i;i=f[i])dis[i]=1;
    ans=0;dfs(0,1);
    for(int i=1;i<=n;i++){
        sum+=dis[i];
    }
    if(sum==n-1)cout<<-1;
    else cout<<m-ans;
}
2023/8/26 21:09
加载中...