C 小y的旅行
先把两个都是的边用并查集连起来,再把含有
的边进行判断,如果这俩本身连起来了,那么这俩就得拆开,
。如果没有连起来,就让他们连起来。
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+10;
int n,m,k,ans;
int fa[N],a[N],b[N];
inline void finit ()
{
for(int i=1;i<=n;i++) fa[i]=i;
}
inline int find(int x)
{
if(fa[x] == x) return x;
return fa[x] = find(fa[x]);
}
inline void join(int a,int b)
{
int a1=find(a),b1=find(b);
if(a1!=b1) fa[a1]=b1;
}
int main()
{
cin>>n>>m>>k;
finit();
for(int i=1;i<=m;i++){
cin>>a[i]>>b[i];
if(a[i]>k && b[i]>k) join(a[i],b[i]);
}
for(int i=1;i<=m;i++){
if(a[i]<=k || b[i]<=k){
int u=find(a[i]);
int v=find(b[i]);
if (u==v) ans++;
fa[u]=v;
}
}
cout<<ans<<endl;
return 0;
} 
京公网安备 11010502036488号