多少沾点健忘症导致的

并查集

在类似于“朋友的朋友是朋友,敌人的敌人是朋友”的题目中,我们考虑并查集。

我们可以利用反集来更加优雅的实现“敌人的敌人是朋友”。

将原长为 \(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';

STL

OI_Wiki_STL

posted @ 2024-04-27 21:18  QianXiquq  阅读(5)  评论(0编辑  收藏  举报