POJ 1135 Domino Effect

题我就没读懂。。。

其实是这样,把每一个key domino当做节点,他们之间的骨牌数目当作边权,用dijkstra处理一下得到的就是骨牌倒道该节点的最短时间,接下来我们要考虑在中间倒完的情况。

如果在两个节点中间倒完的话,也就意味着从起点经过两个key domino到终点,左右两边走过的时间是一样的,所以我们可以用(dis[a]+dis[b]+edge.cost)/2这个就可以求出在两点之间倒完需要多少时间,我们把每条边都这样过一遍,如果求出来的这个值比左右两边节点的dis都大,说明倒在中间,如果正好等于某一个节点的dis值,就把那个节点当作终点,把所有的边都这样过完之后,找到最大的(dis[a]+dis[b]+edge.cost)/2对应的终止情形,就是答案。

POJ 2828 Buy Tickets

这个是灵活使用线段树了,把线段树当作路径,一边整理有多少个空位,一边按着这些数据快速地插入节点。

注意这个题正难则反的思想,反着来看这个请求序列,是可以做的,正着处理就坏事了,所以当卡题的时候不妨试一试把当前的思考/阅读方向反过来,也许会有灵感。

我已经很尽力地优化了,1600跑过,只能说那些几百跑过的大神真是强,无法比肩。

POJ 3258 River Hopscotch

二分不会啊。。。

POJ 2299 Ultra-QuickSort

SXBK,总的交换次数会爆掉int。。。我他妈wa了一天

改造归并排序,保存交换次数就可以了

POJ 3518 Prime Gap

埃氏筛法,没啥好说的嗯。

POJ 2503 Babelfish

这个是拿map水过去的版本,其实应该自己手写一个的。。。

POJ 1679 The Unique MST

这个题我没想出来,一种解法是首先对于每条边确认是不是还有和这条边权值相同的其他边,如果有的话标记上,然后先来一遍裸的kruskal,把第一遍kruskal用到的节点全都标记上,然后开始扫,如果当前边既有同权的其他边又被在第一次kruskal中使用了了,就把这个边干掉再来一遍kruskal,看看这次生成树的总权值变没变,如果没有变就说明生成树不唯一,如果变了,就保持着这个边被干掉的状态接着扫,碰见符合要求的再干掉(保持着以前干掉的边被干掉的状态,用剩下的边尝试组生成树.如果你不判断有没有同权的边直接挨个把第一遍用过的边干掉,也可以。

RE了好多次然后换个编译器就过了,我也不知道是我抽了还是oj抽了,还有可能是.size()这个函数因为是返回unsigned long如果-1的话可能故障,以后要么强制类型转换,要么开个常数存一下。

POJ 1751 Highways

要是在POJ上做的话不要交C++会T,交G++就好了。

kruskal,没啥好说的。

POJ 1256 Anagram

next_permutation的返回bool值的含义是接下来还有没有可以用的排列。

然后要注意这个题的排序方式是特殊的,要自己构建排序函数。

排序函数返回值的意思是:如果返回true,则交换两个值,返回false,则不对两个值操作,所以如果a==b一定要返回false,否则会死循环。

POJ 1002 487-3279

真是良/心/题

首先要注意没有重复情形的时候,要输出一句话

然后以0开头的电话号码要处理

然后输入时候不能用cin

嗯就这样{(-_-)}

Scroll to top