107. 寻找存在的路径 (kamacoder.com)
思路:并查集模板题,记住以下模板就行
#include<bits/stdc++.h>
using namespace std;
int n,m;
vector<int>father(101,0);
void init(){
for(int i=1;i<=n;i++){
father[i]=i;
}
}
//寻根
int find(int u){
return u==father[u]?u:father[u]=find(father[u]);
}
//判断是否同根
bool isSame(int u,int v){
u=find(u);
v=find(v);
return u==v;
}
void join(int u,int v){
u=find(u);
v=find(v);
if(u==v){
return;
}
//v->u加入并查集
father[v]=u;
}
int main(){
cin>>n>>m;
init();
while(m--){
int s,t;
cin>>s>>t;
join(s,t);
}
int a,b;
cin>>a>>b;
if(isSame(a,b)){
cout<<1<<endl;
return 0;
}
cout<<0<<endl;
}
总结
模板记住,并查集1.用于寻找根结点。2.用于将两个结点放入一个集合中。3.判断是否在同一个集合内