多少沾点健忘症导致的
并查集
在类似于“朋友的朋友是朋友,敌人的敌人是朋友”的题目中,我们考虑并查集。
我们可以利用反集来更加优雅的实现“敌人的敌人是朋友”。
将原长为 \(n\) 的数组开到 \(2n\)。
如果 \(a\) 和 \(b\) 是敌人,合并 \(n+b\) 和 \(a\) ,\(n+a\) 和 \(b\);如果 \(c\) 和 \(a\) 是敌人,合并 \(n+c\) 和 \(a\) ,\(n+a\) 和 \(c\)。
注意顺序不可更改,传参必须先 \(n+...\) 再 \(非...\),即:
//若 x 与 y 为敌人
merge(x + n, y);
merge(y + n, x);
通过这样的操作,我们发现 \(b\) 与 \(c\) 合并到了一起。
string int 简单互换
//int -> string
int a=114;
string str=to_string(a);
cout<<a<<'\n';
//string -> int
string b="1919810";
int i=atoi(b.c_str());
cout<<i<<'\n';