博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1875: [SDOI2009]HH去散步
阅读量:5060 次
发布时间:2019-06-12

本文共 1252 字,大约阅读时间需要 4 分钟。

Time Limit: 20 Sec Memory Limit: 64 MB

Submit: 2244 Solved: 1144
[Submit][Status][Discuss]
Description

HH有个一成不变的习惯,喜欢饭后百步走。所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离。 但

是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回。 又因为HH是个喜欢变化的人,所以他每
天走过的路径都不完全一样,他想知道他究竟有多 少种散步的方法。 现在给你学校的地图(假设每条路的长度都
是一样的都是1),问长度为t,从给定地 点A走到给定地点B共有多少条符合条件的路径
Input

第一行:五个整数N,M,t,A,B。

N表示学校里的路口的个数
M表示学校里的 路的条数
t表示HH想要散步的距离
A表示散步的出发点
B则表示散步的终点。
接下来M行
每行一组Ai,Bi,表示从路口Ai到路口Bi有一条路。
数据保证Ai != Bi,但不保证任意两个路口之间至多只有一条路相连接。
路口编号从0到N -1。
同一行内所有数据均由一个空格隔开,行首行尾没有多余空格。没有多余空行。
答案模45989。
N ≤ 20,M ≤ 60,t ≤ 2^30,0 ≤ A,B
Output

一行,表示答案。

Sample Input

4 5 3 0 0

0 1

0 2

0 3

2 1

3 2

Sample Output

4

解题思路

树状数组+离线,如果将询问按照l排序,那么后面出现的与前面相同的可以替代前面的,所以记录一个nxt[i]数组,表示i这个位置往后第一个与i元素相同的元素的下标,然后将询问按照l排序,每次将此时扫到的元素的nxt在树状数组里+1。

代码

#include
#include
#include
using namespace std;const int MAXN = 1000005;inline int rd(){ int x=0,f=1;char ch=getchar(); while(!isdigit(ch)) {
if(ch=='-') f=-1;ch=getchar();} while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();} return x*f;}int n,m,a[MAXN],nxt[MAXN],p[MAXN],mx,f[MAXN];struct Data{ int l,r,id,ans;}data[MAXN];inline bool cmp(Data A,Data B){ if(A.l==B.l) return A.r

转载于:https://www.cnblogs.com/sdfzsyq/p/9676915.html

你可能感兴趣的文章
C# BS消息推送 SignalR介绍(一)
查看>>
WPF星空效果
查看>>
WPF Layout 系统概述——Arrange
查看>>
PIGOSS
查看>>
几款Http小服务器
查看>>
iOS 数组排序
查看>>
第三节
查看>>
PHP结合MYSQL记录结果分页呈现(比较实用)
查看>>
Mysql支持的数据类型
查看>>
openSuse beginner
查看>>
Codeforces 620E(线段树+dfs序+状态压缩)
查看>>
Windows7中双击py文件运行程序
查看>>
Market entry case
查看>>
bzoj1230 开关灯 线段树
查看>>
LinearLayout
查看>>
学习python:day1
查看>>
css3动画属性
查看>>
第九次团队作业-测试报告与用户使用手册
查看>>
Mongodb 基本命令
查看>>
控制文件的备份与恢复
查看>>