P8604 [蓝桥杯 2013 国 C] 危险系数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
int x[N],y[N],p[N];
int n,m,st,ed;
int find(int n)
{
if(p[n]!=n)
{
p[n]=find(p[n]);
}
return p[n];
}
bool check(int u)
{
for(int i=1;i<=n;i++)
{
p[i]=i;
}
for(int i=1;i<=m;i++)
{
if(x[i]==u||y[i]==u)continue;
int px=find(x[i]),py=find(y[i]);
if(px!=py)
{
p[px]=py;
}
}
return find(st)!=find(ed);
}
int main()
{
std::ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>x[i]>>y[i];
}
cin>>st>>ed;
for(int i=1;i<=n;i++)
{
p[i]=i;
}
for(int i=1;i<=m;i++)
{
int px=find(x[i]),py = find(y[i]);
if(px!=py)p[px]=py;
}
if(find(st)!=find(ed))
{
cout<<-1;
return 0;
}
else
{
int ans = 0;
for(int i=1;i<=n;i++)
{
if(i!=st&&i!=ed)
{
if(check(i))ans++;
}
}
cout<<ans;
}
return 0;
}