链式前向星,双向边的nxt,to,w数组一定要开两倍!!!
注意点和边的个数,不要混淆。
实在不行就写vector
数据类型:
1、方案数不取模最好开long long,避免溢出。
2、最好做题前先预算答案范围。
3、使用浮点数时,比较大小定义eps。
循环:
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)//不要打成i,要及时检查;要打m时不要打n
初始化:
多组数据:
检查每个非读入变量、数组、STL容器,全部清空。
有些容器用clear,queue一类的记得
while(!q.empty()) q.pop();
变量/数组:
答案如果有负数要注意,DP的f数组初值一般不能设为0。
不合法的可能要设为 $-infty$
BFS:
Dijkstra类的广搜,不管队列里什么数据,更新时都要用当前最新状态!
倍增求LCA:
for(i=1;i<=lgn;++i)
for(x=1;x<=n;++x)
f[x][i]=f[f[x][i-1]][i-1];
for循环的两维,i代表递推顺序,从f[x][i-1]才能到f[x][i],一定要写在外面。
STL:
使用lower_bound等函数要写成员函数,效率较高。eg:
multiset<int> st;int x=1; lower_bound(st.begin(),st.end(),x);//反面教材 st.lower_bound(x);//正确写法,效率较高
其它:
题意一定要看清楚!!!有看似矛盾的句子要多看几遍,找出每句话的意思,排除矛盾。
讨论很多情况的题目,要不重不漏,写全代码。
写法一定要简单、直接,不同意义的变量尽量明显地分开,不要共用一个数组。
选择自己常用、有把握的代码风格。