1、关于long long
c++输入输出可用流读入、输出(cin cout fin fout…)
scanf printf 时 要用%lld 不要用%I64d
2、数据范围
int : -(2^31-1)—-2^31-1
普通数据都可以使用 4 byte
long long -(2^63-1)—-2^63-1
一般的大数据使用 8 byte
注意不要数组开太多
更大的数据需要看题目是否有:
模的要求
超出范围(如2e9)则输出-1
最后才考虑 高精度(比较麻烦)
值得注意:即使用了大范围的数据类型,也要注意先减后加,先除后乘,以免在运算过程中超出
3、DAG的最小生成树(单维,多维)
普通方法:一共有n*n条边,再做Kruskal
但是如果n很大(如10000),则需要考虑减少无用的边
例子:有n个点坐标表示为(xi,yi,zi),每两个点之间都有一条边。两点距离dis[i,j] = min( |Xi-Xj|, |Yi-Yj|, |Zi-Zj|)。 求最小生成树
可以依次按照x维,y维,z维排序。增加每次排序中相邻的点之间的边,得到3n条边。如图:
因为分别连接相邻的点与直接连接分开的两点距离相同,而多连接了一个点,显然更优。
这样问题就解决了