种类并查集
扩展域并查集,可以维护两种及以上的关系
假想敌:假设i的敌人是i+n,范围多了一倍
- 三种关系:友好关系,敌对关系,暂时无关系
- 三种操作:
- 确认友好关系(合并)
- 确认敌对关系:x和y是敌人,即x和y的敌人合并,y和x的敌人合并
- 查询:
void search(int a,int b){ int root1=findRoot(a); int root2=findRoot(b); if(root1==root2){ cout<<"朋友关系"<<endl; return; } int root3=findRoot(a+n); //a的敌人 int root4=findRoot(b+n); //b的敌人 if(root1==root4&&root2==root2){ cout<<"敌人关系"<<endl; return; } cout<<"暂无关系"<<endl; }
若有更多的关系,范围可以再扩大,比如假设i的天敌是i+n,假设i的猎物是i+2n,假设i的同类是i+3n,范围扩大了3倍

浙公网安备 33010602011771号