2021寒假总结

  • C - The Tower of Babylon UVA - 437
    排序 + dp,值得注意的是排序的方式。因为这个题目方块的三维具有可交换性,所以比较时和比较前的处理要理顺。

  • HDU 4857
    反向建边+topo排序 ,注意题目要求的1,2,3的位置依次尽量靠前,这和字典序是不一样的。所以优先存最大的编号到优先队列里面。

  • HDU 3231
    一边拓扑,一边更新值。

            for(int i=0;i<V[k][u].size();i++){
                int v=V[k][u][i];
                val[k][v]=max(val[k][v],val[k][u]+1);
                if(!(--in[k][v])){
                    ++cnt;
                    Q.push(v);
                }
            }
 
  • cf 770C
    依然是反向建边,但这里为了判环,是这样写的
void Dfs(int x){
    if(Tag[x]==2)return;
    if(Tag[x]==1){
        printf("-1");
        exit(0);
    }
    Tag[x]=1;
    for(int i=0;i<V[x].size();i++){
        int v=V[x][i];
        Dfs(v);
    }
    ans.push_back(x);
    Tag[x]=2;
}
  • HDU 6805
    在一个点有左右手两种状态,于是把一个点拆成左手和右手两个点,然后附上边权,跑最短路。

  • HH的项链
    把询问的区间按右端点排序,然后记录颜色最近一次出现的位置,把它移动到尽量靠右.最后查询用树状数组就可.

sort 以后利用树状数组边 upd 边 calc 是挺常见的一个操作了.

  • 巧克力棒 bzoj 1299
    先手只要取最长的异或和为0的巧克力棒,那么留下的巧克力棒的异或和一定不为0,后手如果在先手的堆里取,肯定输,后手如果加几根巧克力棒,先手就吃让所有巧克力棒的异或和为零。
posted @ 2021-03-07 20:01  GUO_dx  阅读(40)  评论(0编辑  收藏  举报