BZOJ 1924 所驼门王的宝藏(强连通分量+树形DP)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1924

题意:

思路:首先建立所有可达点之间的有向图。之后求强连通分量SCC,缩点重新构图。然后就是一个树,树形DP一下即可。

int n,r,c;
map<i64,int> mp;
map<int,int> mp1,mp2;

struct node
{
    int x,y,op;
};

node a[N];
int visit[N];
vector<int> V1[N],V2[N];
int X,Y;

void Add(int x,int y,int i)
{
    if(mp1.count(x)==0) mp1[x]=++X;
    V1[mp1[x]].pb(i);

    if(mp2.count(y)==0) mp2[y]=++Y;
    V2[mp2[y]].pb(i);
}

int dx[]={-1,-1,-1,0,1,1,1,0};
int dy[]={-1,0,1,1,1,0,-1,-1};

vector<int> g[N];

void build()
{
    int i,j,k,p,x,y;
    i64 q;
    FOR1(i,n)
    {
        if(a[i].op==1)
        {
            p=mp1[a[i].x];
            FOR0(j,SZ(V1[p])) if(V1[p][j]!=i) g[i].pb(V1[p][j]);
        }
        else if(a[i].op==2)
        {
            p=mp2[a[i].y];
            FOR0(j,SZ(V2[p])) if(V2[p][j]!=i) g[i].pb(V2[p][j]);
        }
        else
        {
            FOR0(j,8)
            {
                x=a[i].x+dx[j];
                y=a[i].y+dy[j];
                if(x<1||x>r||y<1||y>c) continue;
                q=x*M+y;
                if(mp.count(q)) g[i].pb(mp[q]);
            }
        }
    }
}

int dfn[N],low[N],color[N],id,num,size[N];
stack<int> St;

void DFS(int u)
{
    dfn[u]=low[u]=++id;
    St.push(u);

    int i,v;
    FOR0(i,SZ(g[u]))
    {
        v=g[u][i];
        if(!dfn[v]) DFS(v),upMin(low[u],low[v]);
        else if(!visit[v]) upMin(low[u],dfn[v]);
    }
    if(low[u]==dfn[u])
    {
        num++;
        do
        {
            v=St.top();
            St.pop();
            visit[v]=1;
            color[v]=num;
            size[num]++;
        }while(u!=v);
    }
}

vector<int> G[N];
int d[N];

int rebuild()
{
    int i,j;
    FOR1(i,n) FOR0(j,SZ(g[i]))
    {
        if(color[i]!=color[g[i][j]])
        {
            G[color[i]].pb(color[g[i][j]]);
            d[color[g[i][j]]]++;
        }
    }
}

int f[N];

int dfs(int u)
{
    if(f[u]!=-1) return f[u];
    f[u]=0;
    int i,v;
    FOR0(i,SZ(G[u])) upMax(f[u],dfs(G[u][i]));
    f[u]+=size[u];
    return f[u];
}

int main()
{
    RD(n,r,c);
    int i;
    i64 p;
    FOR1(i,n)
    {
        RD(a[i].x,a[i].y,a[i].op);
        Add(a[i].x,a[i].y,i);
        p=a[i].x*M+a[i].y;
        mp[p]=i;
    }
    build();
    FOR1(i,n) if(!visit[i]) DFS(i);
    rebuild();clr(f,-1);
    int ans=0;
    FOR1(i,num) if(!d[i]) upMax(ans,dfs(i));
    PR(ans);
}

BZOJ 1924 所驼门王的宝藏(强连通分量+树形DP),布布扣,bubuko.com

时间: 2024-08-01 22:47:54

BZOJ 1924 所驼门王的宝藏(强连通分量+树形DP)的相关文章

【题解】SDOI2010所驼门王的宝藏(强连通分量+优化建图)

[题解]SDOI2010所驼门王的宝藏(强连通分量+优化建图) 最开始我想写线段树优化建图的说,数据结构学傻了233 虽然矩阵很大,但是没什么用,真正有用的是那些关键点 考虑关键点的类型: 横走型 竖走型 八连通型 本质上只有两种类型(走一大串/走八连通),我们考虑这样一种建图方法: 对于每一行每一列建立一个点(点权为\(0\)) 对于关键点建立一个点(点权为\(1\)) 然后考虑这样一种建图方式,得到一个有点权无边权图 关键点所在的行与列无偿地向这个关键点连边 横走型的关键点向行连一条边,竖走

【BZOJ-1924】所驼门王的宝藏 Tarjan缩点(+拓扑排序) + 拓扑图DP

1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 787  Solved: 318[Submit][Status][Discuss] Description Input 第一行给出三个正整数 N, R, C. 以下 N 行,每行给出一扇传送门的信息,包含三个正整数xi, yi, Ti,表示该传送门设在位于第 xi行第yi列的藏宝宫室,类型为 Ti.Ti是一个1~3间的整数, 1表示可以传送到第 xi行任意

[SDOI2010]所驼门王的宝藏 --tarjan缩点+最长路

[SDOI2010]所驼门王的宝藏 题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为“先知”的Alpaca L. Sotomon是这个家族的领袖,外人也称其为“所驼门王”.所驼门王毕生致力于维护家族的安定与和谐,他曾亲自率军粉碎河蟹帝国主义的野蛮侵略,为族人立下赫赫战功.所驼门王一生财宝无数,但因其生性节俭低调,他将财宝埋藏在自己设计的地下宫殿里,这也是今天Henry Curtis故事的起点.Henry是一个爱财如命的贪婪家伙,而又非常聪明,他费尽心机谋划了这次盗窃行动,

题解 P2403 【[SDOI2010]所驼门王的宝藏】

题目链接 Solution [SDOI2010]所驼门王的宝藏 题目大意:给定一个\(R\)行\(C\)列的矩阵,有些方格有宝藏和传送门.你可以从任意方格进入,到达有宝藏的宫室时可以横行任意传送.纵行任意传送.八连块任意传送(视传送门类型而定),问最多可以获得多少宝藏 分析:看到什么"传送"这类字眼我们多半就会想到图论.于是乎我们\(1min\)就可以想出一个暴力算法: 每个有宝藏的点向它可以到达的所有有宝藏的点连边,\(Tarjan\)缩点后求\(DAG\)最长路 大概有\(40\)

BZOJ 1093 最大半连通子图(强连通分量+树形DP)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1093 题意: 思路:(1)首先,强连通分量中的一个点若在最大半连通子图中,则必定整个连通分量中的点都在,因为都在还是满足半连通的性质而且使得节点数更多. (2)因此,求出强连通分量缩点,形成一个有向无环图,其实与树是差不多的.在这个图上DP一次即可,也就是找出最长链以及最长链的个数. vector<int> g[N],g1[N]; int n,m,mod; int dfn[N],lo

BZOJ 1924: [Sdoi2010]所驼门王的宝藏 【tarjan】

Description 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为“先 知”的Alpaca L. Sotomon 是这个家族的领袖,外人也称其为“所驼门王”.所 驼门王毕生致力于维护家族的安定与和谐,他曾亲自率军粉碎河蟹帝国主义的野 蛮侵略,为族人立下赫赫战功.所驼门王一生财宝无数,但因其生性节俭低调, 他将财宝埋藏在自己设计的地下宫殿里,这也是今天Henry Curtis 故事的起点. Henry 是一个爱财如命的贪婪家伙,而又非常聪明,他费尽心机谋划了这次盗窃 行动,破解

洛谷2403 [SDOI2010]所驼门王的宝藏

题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为“先知”的Alpaca L. Sotomon是这个家族的领袖,外人也称其为“所驼门王”.所驼门王毕生致力于维护家族的安定与和谐,他曾亲自率军粉碎河蟹帝国主义的野蛮侵略,为族人立下赫赫战功.所驼门王一生财宝无数,但因其生性节俭低调,他将财宝埋藏在自己设计的地下宫殿里,这也是今天Henry Curtis故事的起点.Henry是一个爱财如命的贪婪家伙,而又非常聪明,他费尽心机谋划了这次盗窃行动,破解重重机关后来到这座地下宫殿前.

[SDOI2010]所驼门王的宝藏

题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为"先知"的Alpaca L. Sotomon是这个家族的领袖,外人也称其为"所驼门王".所驼门王毕生致力于维护家族的安定与和谐,他曾亲自率军粉碎河蟹帝国主义的野蛮侵略,为族人 立下赫赫战功.所驼门王一生财宝无数,但因其生性节俭低调,他将财宝埋藏在自己设计的地下宫殿里,这也是今天Henry Curtis故事的起点.Henry是一个爱财如命的贪婪家伙,而又非常聪明,他费尽心机谋划了这次盗窃行动,破解

P2403 [SDOI2010]所驼门王的宝藏

https://www.luogu.org/problemnew/show/P2403 题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为“先知”的Alpaca L. Sotomon是这个家族的领袖,外人也称其为“所驼门王”.所驼门王毕生致力于维护家族的安定与和谐,他曾亲自率军粉碎河蟹帝国主义的野蛮侵略,为族人立下赫赫战功.所驼门王一生财宝无数,但因其生性节俭低调,他将财宝埋藏在自己设计的地下宫殿里,这也是今天Henry Curtis故事的起点.Henry是一个爱财如命的贪