BZOJ1924_所驼门王的宝藏_KEY
这道题苟了我好久,因为链表的内存问题,之后再细讲。
首先这是一道Tarjan+DAG上DP的题目。
有三种门,对于每种门可以和其他门相连。即连边。
使用链表快速查询连边。
建完图后可以进行Tarjan缩点。
然后做一遍DAG上DP就好了。(记搜)
然后因为建图时会有很多条边,而行列最多只有100000个,所以要分开定义。
不然会爆内存。
code:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int read()
{
char c;while(c=getchar(),c<''||c>'');
int x=c-'';while(c=getchar(),c>=''&&c<='')x=x*+c-'';
return x;
} int N,R,C,x,y,fx,fy,o,a[][]; struct list{
int head[],nxt[],To[],cnt;
list(){memset(head,-,sizeof head);memset(nxt,-,sizeof nxt);} void add(int x,int y){
To[cnt]=y;
nxt[cnt]=head[x];
head[x]=cnt;
cnt++;
}
}M,NM; struct list2{
int head[],nxt[],To[],cnt;
list2(){memset(head,-,sizeof head);memset(nxt,-,sizeof nxt);} void add(int x,int y){
To[cnt]=y;
nxt[cnt]=head[x];
head[x]=cnt;
cnt++;
}
}A,B; int DFN[],LOW[],stack[],top,cnt,vis[],fa[];
int otk[],f[],sk[],ans; void tarjan(int now)
{
stack[++top]=now;
DFN[now]=LOW[now]=++cnt;
vis[now]=;
for(int i=M.head[now];i!=-;i=M.nxt[i]){
if(!DFN[M.To[i]])tarjan(M.To[i]),LOW[now]=min(LOW[now],LOW[M.To[i]]);
else if(vis[M.To[i]])LOW[now]=min(LOW[now],DFN[M.To[i]]);
}
if(DFN[now]==LOW[now]){
while(stack[top]!=now)
fa[stack[top]]=now,sk[now]++,vis[stack[top]]=,top--;
fa[stack[top]]=now;
sk[now]++;
vis[stack[top--]]=;
}
return ;
} int dfs(int now)
{
if(vis[now])return f[now];
vis[now]=;
for(int i=NM.head[now];i!=-;i=NM.nxt[i]){
f[now]=max(f[now],dfs(NM.To[i]));
}
f[now]+=sk[now];
ans=max(ans,f[now]);
return f[now];
} int main()
{
N=read(),R=read(),C=read();
register int i,j,k;
for(i=;i<=N;i++){
a[i][]=read(),a[i][]=read(),a[i][]=read();
A.add(a[i][],i);B.add(a[i][],i);
}
for(i=;i<=N;i++){
x=a[i][],y=a[i][],o=a[i][];
if(o==)
for(j=A.head[x];j!=-;j=A.nxt[j])
if(A.To[j]!=i)M.add(i,A.To[j]);
if(o==)
for(j=B.head[y];j!=-;j=B.nxt[j])
if(B.To[j]!=i)M.add(i,B.To[j]);
if(o==){
for(k=-;k<;k++)
for(j=A.head[x+k];j!=-;j=A.nxt[j]){
fx=a[A.To[j]][],fy=a[A.To[j]][];
if(fx<=x+&&fx>=x-&&fy<=y+&&fy>=y-&&A.To[j]!=i)
M.add(i,A.To[j]);
}
}
}
for(i=;i<=N;i++)if(!DFN[i])tarjan(i);
memset(vis,,sizeof vis);
for(i=;i<=N;i++){
if(!vis[i]){vis[i]=;
for(j=M.head[i];j!=-;j=M.nxt[j]){
if(fa[M.To[j]]!=fa[i])
otk[fa[M.To[j]]]++;
}
}
}
for(i=;i<=N;i++)
for(j=M.head[i];j!=-;j=M.nxt[j])
if(fa[i]!=fa[M.To[j]])NM.add(fa[i],fa[M.To[j]]);
memset(vis,,sizeof vis);
for(i=;i<=N;i++)
if(!otk[fa[i]]&&!vis[fa[i]])
dfs(i);
printf("%d",ans);
return ;
}
BZOJ1924_所驼门王的宝藏_KEY的更多相关文章
- 【BZOJ-1924】所驼门王的宝藏 Tarjan缩点(+拓扑排序) + 拓扑图DP
1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 787 Solved: 318[Submit][Stat ...
- [BZOJ 1924][Sdoi2010]所驼门王的宝藏
1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1285 Solved: 574[Submit][Sta ...
- 「BZOJ1924」「SDOI2010」 所驼门王的宝藏 tarjan + dp(DAG 最长路)
「BZOJ1924」[SDOI2010] 所驼门王的宝藏 tarjan + dp(DAG 最长路) -------------------------------------------------- ...
- 8.18 NOIP模拟测试25(B) 字符串+乌鸦喝水+所驼门王的宝藏
T1 字符串 卡特兰数 设1为向(1,1)走,0为向(1,-1)走,限制就是不能超过$y=0$这条线,题意转化为从(0,0)出发,走到(n+m,n-m)且不越过$y=0$,然后就裸的卡特兰数,$ans ...
- 【题解】SDOI2010所驼门王的宝藏(强连通分量+优化建图)
[题解]SDOI2010所驼门王的宝藏(强连通分量+优化建图) 最开始我想写线段树优化建图的说,数据结构学傻了233 虽然矩阵很大,但是没什么用,真正有用的是那些关键点 考虑关键点的类型: 横走型 竖 ...
- noip模拟5[string·matrix·big·所驼门王的宝藏]
怎么说呢这一场考得还算可以呢 拿了120pts,主要是最后一个题灵光开窍,想起来是tarjan,然后勉勉强强拿了40pts,本来是可以拿满分的,害 没事考完了就要反思 这场考试我心态超好,从第一个题开 ...
- [SDOI2010]所驼门王的宝藏
题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为"先知"的Alpaca L. Sotomon是这个家族的领袖,外人也称其为"所驼门王". ...
- 【BZOJ1924】【SDOI2010】所驼门王的宝藏(Tarjan,SPFA)
题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为"先知"的Alpaca L. Sotomon是这个家族的领袖,外人也称其为"所驼门王". ...
- [LuoguP2403][SDOI2010]所驼门王的宝藏
题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为"先知"的Alpaca L. Sotomon是这个家族的领袖,外人也称其为"所驼门王". ...
随机推荐
- ZT linux 线程私有数据之 一键多值技术
这个原作者的这个地方写错了 且他举的例子非常不好.最后有我的修正版本 pthread_setspecific(key, (void *)&my_errno); linux 线程私有数据之一键多 ...
- List的 并集、交集、差集操作
package com.zheting.collection.list; import java.util.ArrayList; import java.util.Arrays; import jav ...
- hdu1579 Function Run Fun(深搜+记忆化)
版权声明:本文为博主原创文章.未经博主同意不得转载.vasttian https://blog.csdn.net/u012860063/article/details/37076755 转载请注明出处 ...
- BZOJ 4028: [HEOI2015]公约数数列 【分块 + 前缀GCD】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=4028 4028: [HEOI2015]公约数数列 Time Limit: 10 Sec ...
- POJ 3264 Balanced Lineup 【ST表 静态RMQ】
传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total S ...
- .Net Core SignalR 初体验
前言 Asp.Net SignalR已经出来很久了,但是一直没有静下心来好好看看.昨天花了几个小时的时间看了下.首先借鉴了官方文档,如何搭建一个SignalR的Demo. 参考文章:https://d ...
- Coursera 机器学习基石 第4讲 学习的可行性
这一节讲述的是机器学习的核心.根本性问题——学习的可行性.学过机器学习的我们都知道,要衡量一个机器学习算法是否具有学习能力,看的不是这个模型在已有的训练数据集上的表现如何,而是这个模型在训练数据外的数 ...
- 在Mac上安装office2016破解版
2018.01.09更新 2017.03.13 更新 2017.02.21 更新 2017.01.16 更新 前言 在Mac上怎么能没有制作文档/表格/ppt的工具呢?在windows上有office ...
- MVC学习十二:Ajax.ActionLink用法
Ajax.ActionLink用法 <!--使用Ajax.BeginForm必须引用的js文件--> <script type="text/javascript" ...
- 【Node.js】Jade视图模板的使用
跟MVC里面的Rezor做差不多的事儿,但是比Rezor弱了一些,比较不喜欢CoffeeScript.Jade这种靠缩进来维系层级结构的做法,就好比接受不了c#中if下面只有一句很长的代码,但是却不加 ...