学校神奇地给了7天假,又可以刷一阵子题了,happy
第一天嘛,就随便做了几道水题了
昂贵的聘礼:枚举等级最小的点再最短路就可以了
钉子与小球:题目本身是超级水的。但有个细节需注意,给两个分数通分相加时,要先约掉一点,不然就会爆int64
假设a/b+c/d=e/f,令k=gcd(b,d),那么e=a*d div k+c*b div k ,f=b div k*d,再对e、f约分这样才不会215
pku1552:超级水题
pku1742:可以看成物品数量有限制的完全背包吧,处理每个物品的时候,转移时带个辅助数组g[j]表示拼出j这个价值用了几个该物品。可是本题十分恶心地需要卡常数才不会tle,for j=1 to m会超,改成for j=c[i] to m才行
pku2983-差分约束系统(bellman-ford比spfa还快。。)对于P A B X,连(A,B,-X)和(B,A,X),对于V A B,连(X,Y,-1),再判有没有负权环就可以了,spfa的话特别要注意,可能有V 1 1这样子的信息,所以取出队首时,要先把队首那个点的进队标记去掉才判得出这种情况
pku2186-求强连通分量缩点,看最低强连通分量(就是出度为0的),如果有多个,那就输0,如果只有1个,就输出这个分量包含的点个数
感觉我缩点那里好像编丑了点。。
pku1112(分类练习题dp之分组):题解见http://www.cppblog.com/linyangfei/archive/2008/08/08/58295.htm
太巧妙了,就是自己想不到。一点总结:这题无非就是想快速得出两个点能不能被分到同一组中,然后就能利用反图的性质设计dp算法来求解了。构造解有点恶心,我卡了好久。。
这题贴个代码吧,虽然慢了点: