题目:排座位
思路:
(1)标记:用一个二维数组,分别将输入的那些人的关系标记,
(2)利用并查集将朋友的人合并分类;
(3)查找:输入a,b 首先看标记数组
visit[a][b] = 1 时 朋友关系
visit[a][b] = 0 时 既不朋友又五敌对
visit[a][b] = -1 时 再分俩种情况:各自进行find查找他们是否有相同的根,有说明有共同的朋友,否则即为纯敌对!
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn = 105;
int f[maxn],visit[maxn][maxn],n;
void init(){//初始化
memset(visit,0,sizeof(visit));
for(int i=1;i<=n;i++) f[i] = i;
}
int findd(int v){//找根
if(v != f[v]) f[v] = findd(f[v]);
return f[v];
}
void merge