快晴

导航

NEU_ACM_预备役练习赛_01——2011_日本_icpc_网络邀请赛

A:数论,筛法

八说了,埃氏筛,欧拉筛。

前缀和,暴力查询就行了。

B:

合法括号序列,没什么要说的。

C:并查集,搜索,暴力

对矩形内与坐标(1,1)连通块改变5次颜色,求能获得(1,1)连通块的最大值。

对于矩形内的每一个连通块,我们使用并查集维护。

对坐标(1,1)的连通块,我们暴力枚举可能出现的每一种颜色,并且更新矩阵内连通块的信息。

最后求出(1,1)坐标连通块最大值。

注意在更新并查集信息时,只需要搜索一种状态,不然常数过大会T()

对于连通块点的数量,我们可以在$$O\left( 1 \right)$$查询。也算是一个小优化八。

node find(int x, int y)
{
    node t;
    if (e[x][y].x != x || e[x][y].y != y)
        t = find(e[x][y].x, e[x][y].y), e[x][y] = find(t.x, t.y);
    return e[x][y];
}//找到并查集祖宗节点
void update()
{
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= m; ++j)
            e[i][j].x = i, e[i][j].y = j;
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= m; ++j)
        {
            for (int k = 1; k <=2; ++k)
            {
                int tx = i + v[k], ty = j + vv[k];
                node tmp = find(tx, ty), t = find(i, j);
                if (check(tx, ty) && mp[tmp.x][tmp.y] == mp[t.x][t.y])
                {
                    e[tmp.x][tmp.y] = t;
                }
            }
        }
    }
}//更新并查集信息

 

D:状态压缩,搜索,拓扑,剪枝,记忆化搜索(状压dp可能性存疑)

八会,补题

E:

八会,补题

F:

八会,补题

G:做n*m次BFS

八会,补题

posted on 2021-09-23 19:42  快晴  阅读(41)  评论(0编辑  收藏  举报