bzoj 1924: [Sdoi2010]所驼门王的宝藏

23333这个垃圾题之前扒过题解了2333

然而这一次做又错了。。。

直接暴力连边,然后缩一下点,重构变成DAG,然后DP。。

(然而在打tarjan的时候忘掉了inq[now]=0....而且把DP搞成了搜索2333)

(附:此题内存玄学)

  1 #include<cstdio>
  2 #include<iostream>
  3 #include<algorithm>
  4 #include<map>
  5 #define N 1000005
  6 #define LL long long
  7 using namespace std;
  8 inline int ra()
  9 {
 10     int x=0,f=1; char ch=getchar();
 11     while (ch<‘0‘ || ch>‘9‘) {if (ch==‘-‘) f=-1; ch=getchar();}
 12     while (ch>=‘0‘ && ch<=‘9‘) {x=x*10+ch-‘0‘; ch=getchar();}
 13     return x*f;
 14 }
 15 struct in_data{
 16     int x,y,id,opt;
 17 }a[N];
 18 struct edge{
 19     int to,next;
 20 }e[N<<2],re[N];
 21 int head[N],rehead[N>>1],cnt,recnt,ind,top,n,x,y;
 22 bool inq[N],vis[N>>1];
 23 map<LL , int > hh;
 24 int ans;
 25 int q[N],dfn[N],low[N];
 26 int size[N>>1],belong[N],tot;
 27 bool cmp_x(in_data a, in_data b){
 28     return a.x<b.x;
 29 }
 30 bool cmp_y(in_data a, in_data b){
 31     return a.y<b.y;
 32 }
 33 void insert(int x, int y){
 34     e[++cnt].to=y; e[cnt].next=head[x]; head[x]=cnt;
 35 }
 36 void reinsert(int x, int y){
 37     re[++recnt].to=y; re[recnt].next=rehead[x]; rehead[x]=recnt;
 38 }
 39 void tarjan(int x)
 40 {
 41     q[++top]=x; dfn[x]=low[x]=++ind;
 42     inq[x]=1;
 43     for (int i=head[x];i;i=e[i].next)
 44         if (!dfn[e[i].to])
 45         {
 46             tarjan(e[i].to);
 47             low[x]=min(low[x],low[e[i].to]);
 48         }
 49         else if (inq[e[i].to]) low[x]=min(low[x],dfn[e[i].to]);
 50     int now=-1;
 51     if (dfn[x]==low[x])
 52     {
 53         tot++;
 54         while (now!=x)
 55         {
 56             now=q[top--];
 57             belong[now]=tot;
 58             size[tot]++;
 59             inq[now]=0;    //........
 60         }
 61     }
 62 }
 63 void rebuild()
 64 {
 65     for (int x=1; x<=n; x++)
 66         for (int i=head[x];i;i=e[i].next)
 67             if (belong[x]!=belong[e[i].to])
 68                 reinsert(belong[x],belong[e[i].to]);
 69 }
 70 void dfs(int x)
 71 {
 72     vis[x]=1; int mx=0;
 73     for (int i=rehead[x];i;i=re[i].next)
 74     {
 75         if (!vis[re[i].to]) dfs(re[i].to);
 76         mx=max(size[re[i].to],mx);
 77     }
 78     ans=max(ans,size[x]+=mx);
 79 }
 80 int main()
 81 {
 82     n=ra(); x=ra(); y=ra();
 83     for (int i=1; i<=n; i++) a[i].x=ra(),a[i].y=ra(),a[i].opt=ra(),hh[(LL)a[i].x*N+a[i].y]=i,a[i].id=i;
 84     sort(a+1,a+n+1,cmp_x);
 85     for (int i=1; i<=n; i++)
 86         if (a[i].opt==1)
 87         {
 88             for (int j=i-1; j>=1; j--)
 89                 if (a[i].x==a[j].x) insert(a[i].id,a[j].id);
 90                     else break;
 91             for (int j=i+1; j<=n; j++)
 92                 if (a[i].x==a[j].x) insert(a[i].id,a[j].id);
 93                     else break;
 94         }
 95     sort(a+1,a+n+1,cmp_y);
 96     for (int i=1; i<=n; i++)
 97         if (a[i].opt==2)
 98         {
 99             for (int j=i-1; j>=1; j--)
100                 if (a[i].y==a[j].y) insert(a[i].id,a[j].id);
101                     else break;
102             for (int j=i+1; j<=n; j++)
103                 if (a[i].y==a[j].y) insert(a[i].id,a[j].id);
104                     else break;
105         }
106     for (int i=1; i<=n; i++)
107         if (a[i].opt==3)
108         {
109             for (int j=a[i].x-1; j<=a[i].x+1; j++)
110                 for (int k=a[i].y-1; k<=a[i].y+1; k++)
111                     if (j!=a[i].x || k!=a[i].y)
112                         if (hh[(LL)j*N+k]) insert(a[i].id,hh[(LL)j*N+k]);
113         }
114     for (int i=1; i<=n; i++)
115         if (!dfn[i]) tarjan(i);
116     rebuild();
117     for (int i=1; i<=tot; i++)
118         if (!vis[i]) dfs(i);
119     printf("%d\n",ans);
120     return 0;
121 }
时间: 2024-12-10 20:02:56

bzoj 1924: [Sdoi2010]所驼门王的宝藏的相关文章

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

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

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

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

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

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

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

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

洛谷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是一个爱财如命的贪

[SDOI2010] 所驼门王的宝藏 [建图+tarjan缩点+DAG dp]

题面传送门: 传送门 思路: 看完题建模,容易得出是求单向图最长路径的问题 那么把这张图缩强联通分量,再在DAG上面DP即可 然而 这道题的建图实际上才是真正的考点 如果对于每一个点都直接连边到它所有的后继节点,那么可以被卡掉(1e5个点在同一行上) 考虑改变思路,运用网络流建图中的一个常用技巧:把横边和竖边映射成点,再从每个点向所在横坐标.纵坐标代表的点连边即可 这样会有2e6+1e5个点,但是tarjan算法效率O(n),完全无压力 自由(和谐)门的话,目前还没有比较好的方法解决 上网看了一

【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行任意