问题来源:
在这道题中,由于有多组数据,为了存储边,我在全局中开了vector存边,再在循环中用vector的clear()函数清除数据,然后——我就MLE了,这是显而易见的,毕竟点的范围是1e5,当多次存储边的时候每个点的vector开出的内存不小,自然会MLE
解决方法
1.把multicase过程写在solve函数中,将vector定义放solve函数里面,再把vector引用传入函数中,这样在每次solve函数退出时会清空内存
2.利用vector 中 的swap
除去datas多余的容量:
std::vector<int>(datas).swap(datas);
清空容量:
std::vector<int>().swap(datas);
3.利用C++11以上vector 和 string 都有成员函数 shrink_to_fit ()
会请求容器降低其容量与size匹配,由编译器决定是否真正释放多余的内存,该方法值是提出请求,是否要实现由编译器说了算。
vector<int> myvector (100);
myvector.resize(10);
myvector.shrink_to_fit();