Souvenir Shop

魔幻题目,这谁搞得到啊...

考场上完全sb了写了个线段树合并,想必我是个复杂度分析都没学过的入门级选手

发现这个网格图dag它的出度最多只有2

如果按照先走朝上的一条边进行dfs走后续遍历,就是遍历完儿子再加自己,那么dfn大于它的一定不会比它低

然后再按照先走朝右的一个边走后续遍历,dfn2大于它的一定不会比它左

那么它可以到达的点满足\(\le dfn1_i,\le dfn2_i\)就可以了...

然后就是普及组随便统计一下的问题了...


Code:

#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
const int N=3e5+10;
template <class T>
void read(T &x)
{
x=0;char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) x=x*10+c-'0',c=getchar();
}
struct koito_yuu
{
int dfn1,dfn2,v,now;
bool friend operator <(koito_yuu a,koito_yuu b){return a.dfn1==b.dfn1?a.dfn2<b.dfn2:a.dfn1<b.dfn1;}
}yuu[N];
int s[N],ans[N],mi[N],vis[N];
int n,m,v[N],to[2][N],dfsclock,dx[N],dy[N];
void add(int x,int d)
{
while(x<=n) s[x]+=d,x+=x&-x;
}
int qry(int x)
{
int ret=0;
while(x) ret+=s[x],x-=x&-x;
return ret;
}
void dfs1(int now)
{
if(!now||vis[now]) return;
vis[now]=1;
dfs1(to[0][now]);
dfs1(to[1][now]);
yuu[now].dfn1=++dfsclock;
}
void dfs2(int now)
{
if(!now||vis[now]) return;
vis[now]=1;
dfs2(to[1][now]);
dfs2(to[0][now]);
yuu[now].dfn2=++dfsclock;
}
int main()
{
freopen("souvenir.in","r",stdin);
freopen("souvenir.out","w",stdout);
read(n),read(m);
for(int i=1;i<=n;i++) read(dx[i]),read(dy[i]),read(yuu[i].v),yuu[i].now=i,mi[i]=n+1;
for(int u,v,i=1;i<=m;i++)
{
read(u),read(v);
if(dx[u]==dx[v])
{
if(dy[u]>dy[v]) std::swap(u,v);
to[0][u]=v;
}
else
{
if(dx[u]>dx[v]) std::swap(u,v);
to[1][u]=v;
}
}
dfs1(1);
dfsclock=0;
memset(vis,0,sizeof vis);
dfs2(1);
std::sort(yuu+1,yuu+1+n);
for(int i=1;i<=n;i++)
{
if(mi[yuu[i].v]>yuu[i].dfn2)
{
add(mi[yuu[i].v],-1);
mi[yuu[i].v]=yuu[i].dfn2;
add(mi[yuu[i].v],1);
}
ans[yuu[i].now]=qry(yuu[i].dfn2);
}
for(int i=1;i<=n;i++) printf("%d\n",ans[i]);
return 0;
}

2019.3.26

Souvenir Shop 解题报告的更多相关文章

  1. poj分类解题报告索引

    图论 图论解题报告索引 DFS poj1321 - 棋盘问题 poj1416 - Shredding Company poj2676 - Sudoku poj2488 - A Knight's Jou ...

  2. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  3. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  4. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  5. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  6. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

  7. 习题: codevs 2492 上帝造题的七分钟2 解题报告

    这道题是受到大犇MagHSK的启发我才得以想出来的,蒟蒻觉得自己的代码跟MagHSK大犇的代码完全比不上,所以这里蒟蒻就套用了MagHSK大犇的代码(大家可以关注下我的博客,友情链接就是大犇MagHS ...

  8. 习题:codevs 1519 过路费 解题报告

    今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...

  9. NOIP2016提高组解题报告

    NOIP2016提高组解题报告 更正:NOIP day1 T2天天爱跑步 解题思路见代码. NOIP2016代码整合

随机推荐

  1. TCP客户端

    TCP通信客户端-解决数据包接收不全的过程 背景:5个串口条码枪,通过MOXA Nport系列转换器,以TCPServer的形式推送扫描到的条码到客户端.5个条码枪均位于流水线上方的支架上,流水线货物 ...

  2. Python开发爬虫之BeautifulSoup解析网页篇:爬取安居客网站上北京二手房数据

    目标:爬取安居客网站上前10页北京二手房的数据,包括二手房源的名称.价格.几室几厅.大小.建造年份.联系人.地址.标签等. 网址为:https://beijing.anjuke.com/sale/ B ...

  3. 从零学习Flutter(一):初识Dart

    Fluter是Google推出的跨平台开发App的一套框架,很多人都说,Google出品比属于金品,故,我也来凑凑热闹,Fluter是用Dart写的,所以在用Fluter之前,我们还是有必要简单了解一 ...

  4. 通过Xtrabackup实现MySQL实例的全库备份与按需单库恢复

    在实际的生产环境中,为了管理方便,我们一般是通过 Xtrabackup实现实例的全库备份,即将实例上的所有数据库备份. 但是,考虑到快速恢复 我们常常面临的需求是快速还原单个数据库.针对初学者来说,网 ...

  5. Greenplum扩容

    Greenplum支持原有主机扩展Segment个数.新增主机.和混合扩展 本文以在已有机器上扩展节点为例 1.可按照hostname:address:port:fselocation:dbid:co ...

  6. SQLServer之创建DML AFTER UPDATE触发器

    DML AFTER UPDATE触发器创建原理 触发器触发时,系统自动在内存中创建deleted表或inserted表,inserted表临时保存了插入或更新后的记录行,deleted表临时保存了删除 ...

  7. iOS Password AutoFill开发指南

    转载请标明来源:https://www.cnblogs.com/zhanggui/p/9431950.html 引言 在<iPhone User Guide for iOS 11.4>这本 ...

  8. 英语口语练习系列-C19-喜欢某人

    简单词汇 1. chair [tʃeə(r)] n. 椅子 chair = ch + air拼读的时候ch发音以及air发音 [ ] sit on a chair 坐在椅子上 [ ] a table ...

  9. python基础篇实战

    1. 判断下面的结果 # 1. 判断下面的结果 # 1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 pri ...

  10. elementUI el-table渲染的时候出现bug

    如下: 问题: value的值一直渲染不出来,因为是boolean类型,出现了bug,把true变成一个字符串就能显示了,太不好用了 为了能渲染出来,不得不写成下列形式: