#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long ll;
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int h[N],e[2*N],ne[2*N],idx,a[N];
bool st[N],point[N];
int n,m,u,v,sum,ans;
//只要ans==sum那么这个点就是关键点
void add(int a,int b)
{
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u)
{
if(u==v)//如果能到v,则经历的次数++
{
sum++;
for(int i=1;i<=n;i++)
{
if(point[i])a[i]++;//a[i],为经历i的次数
}
return ;
}
for(int i=h[u];i!=-1;i=ne[i])
{
int j=e[i];
if(!st[j])
{
point[j]=1;//记录从u->v经历的点为1
st[j]=true;
dfs(j);
st[j]=false;
point[j]=0;//复原
}
}
}
int main()
{
IOS
cin>>n>>m;
memset(h,-1,sizeof h);
for(int i=1;i<=m;i++)
{
int a,b;cin>>a>>b;
add(a,b),add(b,a);
}
cin>>u>>v;dfs(u);
for(int i=1;i<=n;i++) if(a[i]==sum&&i!=v) ans++;
if(ans) cout<<ans<<endl;
else cout<<-1<<endl;
return 0;
}
[蓝桥杯 2013 国 C] 危险系数(DFS)
最新推荐文章于 2024-07-24 19:27:25 发布