马上NOIP2018啦,突然发现自己比去年还菜,写水题时出现了很多错误,记录一下。
节点从0编号。
所以以i为根时不能设i的根为0,应设为-1
for(int i=0;i<n;i++) dp(i,-1),ans=min(ans,min(f[i][0],f[i][1]));
开始时开数组过大导致MLE,改小后90分,TLE一点,被卡常了QWQ
本来想切一切水题的,结果还WA了
不过还想是前面想复杂了QwQ
树形DP,开始状态转移方程推错了
没开longlong见祖宗
前面一直没有想好单调队列的入队和出队的条件,还是思维太差。
状态转移的顺序+边界条件没有想清楚
一次AC,然而调试了很久。读题+思路的问题:一辆车没经过的车站在起始站与终点站之间
一次AC,然而还是调试了很久,主要是反向建边时和正向的用的一个head数组。
把快速幂写成这样,然后还过样例了??!
inline ll qpow(int a,int b) { ll ans=1,mul=a; while(b) { if(b&1) ans*=mul,ans%=n; mul*mul,mul%=n; b>>=1; } return ans%n; }
忘取模了都有80分qwq
BFS+SPFA
坑题:我们一开始反向bfs,把终点能走的点记录到一个vis数组里;
然后遍历一遍不和终点连接的点,把vis数组置为false。
把vis数组置为false之前一定要备份一份vis数组
如果一个点一开始被标记,它通过一个不和终点连接的点删除了,那么有可能过一会被当作一开始就没有标记的点!
模拟。本身就不擅长这种题,错误如下:
1.题意有问题
2.对于字符串操作不熟
数组开小
多次调用strlen函数导致TLE,拿一个变量记录lena就行了
有一些细节没有讨论好
线段树空间开4倍,add数组开4倍
update的时候写下了这样的代码:
inline void update(int o,int x,int y,int z) { int l=tree[o].l,r=tree[o].r; if(x<=l&&y>=r) { add[o]=z; tree[o].sum=(tree[o].r-tree[o].l+1)*add[o]; return; } else { if(add[o]!=-1) pushdown(add[o]); if(x>r||y<l) return; update(lc,x,y,z); update(rc,x,y,z); tree[o].sum=tree[lc].sum+tree[rc].sum; } }
dfs2的时候写下了dfs2(root,1)的神奇代码。
正确的是dfs2(root,root)
数组开小
原文:https://www.cnblogs.com/wlzs1432/p/9371163.html