[POI2007]EGZ-Driving Exam】的更多相关文章

题面 有点意思的题 从一个位置$i$出发可以到达每一个位置即是从$1,n$出发可以到达$i$.然后有了一个做法:把图上下反转后建反图,这样就可以求从一个点$i$到达左右两侧的花费$dp[i][0/1]$了,这个花费就是当前总长度-到这个点为止的LIS长度(左右各求一遍).因为还要考虑边的这个问题,可以用一个权值树状数组维护前/后缀最大值来实现.可以发现合法点的左侧都能到达左端,右侧都能到达右端,所以其实我们找的是一段区间,即找一段区间$(l,r)$使得$dp[l][1]+dp[r][0]<=k$…
能从iii走到所有跑道 相当于 能从iii走到111和nnn. 边反向后就相当于 能从111和nnn走到iii. 为了方便叙述,把111~nnn叫做x坐标,111~(m+1)(m+1)(m+1)叫做y坐标. 然后我们将图上下翻转(yyy坐标)后,能从111走到iii的话一定经过i−1i-1i−1条向右的边,且这些边的yyy坐标不下降. 那么我们设fl[i]fl[i]fl[i]表示从111走到iii最小加边数量,那么有fl[i]=i−1−LISfl[i]=i-1-LISfl[i]=i−1−LIS这…
i可以作为起点说明把边反向后可以从1和n到达i. 设fl[i]表示从1到达i至少需要加几条边,fr[i]表示从n到达i至少需要加几条边. 把图上下翻转后,从左往右依次计算fl[i],有fl[i]=i-1-左边LIS的长度,用树状数组维护即可$O(n\log n)$求出. 从右往左计算fr[i]同理. 然后需要求i,j(i<=j),使得fr[i]+fl[j]<=k. 由于fl单调递增,fr单调递减,因此随着i不断右移,j也会不断右移,所以可以$O(n)$求出. #include<cstdi…
能到达所有路的充要条件是能到达左右两端的路 用vector反向建边对每条路左右分别求个最长不上升子序列 预处理出每条路向左向右分别需要多建多少路才能到达最左端和最右端 然后跑个\(\Theta(n)\)的尺取法就可以了 本题最长不上升子序列用vector+zkw线段树比二分更加好想? 原来标程的solve函数尺取时出锅(但是居然AC了 感谢我自己回来看题解发现看不懂 现在这题解是真题解了 #include"cstdio" #include"cstring" #inc…
题目 BZOJ 神仙题,可比那些氵紫题有意思多了 做法 \(i\)能作为起始点,当\(i\)能到达\(1\)~\(i-1\)和\(i+1\)~\(n\) 这样处理显然会麻烦,因为要从每个点都特判一次 所以我们转换条件,当且仅当\(i\)能到达\(1\)和\(n\) 这样虽然判断次数少了,但是仍然要每个点跑一遍 转换问题:连反向边,则当且仅当\(1\)和\(n\)能到达\(i\),由于单调性,跑的次数为常数级别 考虑增加边,\(i\)能到达\(1\),转换为且单调序列的补集 显然,向左向右的补集有…
Getting Driving License Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 347    Accepted Submission(s): 78 Problem Description Have you got a driving license? Acquiring a driving license brings y…
1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Status][Discuss] Description 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景.昔日,乡下有依次编号为1..n的n个小村庄,某些村庄之间有一些双向的土路.从每个村庄都恰好有一条路径到…
配置时间:2015年11月27日 配置人:撰写人:微冷的雨   Happy 01.Linux安装图 欢迎页面 桌面 02.Linux命令之文件目录操作 给北大青鸟五道口校区创建三个机房(L4,L5,L6) 给三个机房创建一个管理者 每个机房有一个班长 找到L5master,给他准备一张点名表 找到L4master,个他准备一张点名表,并且给他准备了一张班训表 L5master提意见了,也需要一张班训表. 并且L5master想要统计下班训信息.例如:行数,字符数等. 然后L4master就不服气…
从问题可以看出是求补图的连通块及点数 但补图太大.所以考虑缩小规模. 当一个点归属于一个连通块后,它以后就不需要了.所以可以用链表,删去这个点,也就减小了规模. 一个点开始bfs,每个点只会进队一次,就被删除了,但是具体的时间复杂度不好估计.. #include<bits/stdc++.h> #define ll long long using namespace std; inline int read(){ ,f=;char ch=getchar(); ;ch=getchar();} *x…
..k次最短路后,考虑如何满足先走一些点 用状压dp,每一个点考虑它所需要经过的点a[i],当当前走过的点包含a[i]时,i 这个点才可以到达. 写的时候用记忆化搜索. #include<bits/stdc++.h> #define ll long long using namespace std; inline int read(){ ,f=;char ch=getchar(); ;ch=getchar();} *x+ch-';ch=getchar();} return x*f; } #de…