CF 766D 带权并查集
题目大意:
给你N个单词M段关系还有Q个询问,关系包括喜欢和不喜欢;对于输入的每段关系,输出“YES”代表不矛盾,“NO”代表矛盾,若这两个单词没有关系则按输入的关系为它们建立关系并输出YES;对于每个询问,如果这两个单词没关系输出3 同义词输出1 反义词输出2 **【带权并查集裸题】******欢迎大佬多多指教!
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<string>
using namespace std;
int n,m,q;
typedef long long LL;
const int N=1e5+10;
int fa[N];
int R[N]; //设定同义词R[i]=0 反义词R[i]=1
char a[30],b[30];
map<string,int>M;
int fi(int x) //路径压缩
{
if(x!=fa[x])
{
int t=fa[x];
fa[x]=fi(fa[x]);
R[x]=(R[t]+R[x])%2;
}
return fa[x];
}
int main()
{
while(~scanf("%d%d%d",&n,&m,&q))
{