本文整理汇总了C++中DisjointSet::joined方法的典型用法代码示例。如果您正苦于以下问题:C++ DisjointSet::joined方法的具体用法?C++ DisjointSet::joined怎么用?C++ DisjointSet::joined使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DisjointSet
的用法示例。
在下文中一共展示了DisjointSet::joined方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main(){
DisjointSet graph;
int t,a,b,n,k;
char opc;
scanf("%d",&t);
for(int u=1;u<=t;u++){
scanf("%d %d",&n,&k);
graph.init(n);
fill( pareja , pareja + n , -1 );
for(int i=0;i<n;i++){
scanf("%d",&a);
if(a==0 || a-1==i) continue;
a--;
pareja[i] = a;
}
vector<pii> query;
vector<pii> otro;
while(k--){
scanf("\n%c",&opc);
if(opc=='C'){
scanf("%d",&a);
//printf("%c %d\n",opc,a);
a--;
b = pareja[a];
if(b==-1) continue;
pareja[a] = -1;
query.push_back( pii( a , -1 ) );
otro.push_back( pii( a , b ) );
}
else{
scanf("%d %d",&a,&b);
//printf("%c %d %d\n",opc,a,b);
a--,b--;
query.push_back( pii( a , b ) );
}
}
for(int i=0;i<n;i++)
if(pareja[i]!=-1)
graph.join( i , pareja[i] );
vector<string> res;
int j = otro.size() - 1;
for(int i=query.size()-1;i>=0;i--){
if(query[i].second!=-1){
if( graph.joined( query[i].second , query[i].first ) )
res.push_back("YES\n");
else res.push_back("NO\n");
}
else{
graph.join( otro[j].first , otro[j].second );
j--;
}
}
printf("Case #%d:\n",u);
for(int i=res.size()-1;i>=0;i--)
printf("%s",res[i].c_str());
}
return 0;
}