1.获取整行输入,空格分割
string book;
getline(cin,book);
stringstream ss(book);
string word;
while(ss>>word){
transform(word.begin(),word.end(),word.begin(),::tolower);//toupper
}
2.多测不要memset,也不要vector.assign大空间(来自某场cf上分局的tle)
3.难蚌时刻。并查集合并,求联通块出现最多的颜色。
用启发式合并没毛病,但是合并的时候,把小的合并到大的,默认合并到px,于是交换c1,c2指针,但是如果没有赋值mx[px] = mx[py]就寄了。因为如果交换之后,mx颜色出现在原来py的联通块里面,此时如果没有赋值mx[px],就得不到正确答案。
if(c1->size()<c2->size()) swap(c1,c2),mx[px]=mx[py];
4.异或是不进位的加法和不借位的减法。$x\bigoplus y \leqslant x+y \ \ \ \ \ \ x \bigoplus y \geqslant x-y$
5.内向基环树森林和树森林。拓扑排序的话,环上的点不进队列。
6.拓扑排序,如果因为题目的某种特性,某条路不需要继续遍历的话,不能直接在处理完这个点之后continue,还要遍历它的出边把别的点的度减掉,不然会影响别的点入队。
7.vector的unique函数要在sort之后用才正常。。。
我的错题集