传送门

Solution 

基环树+倍增+双指针

第一次因为#define int long long而玄学RE

为什么标程都不用开\(long long\)啊

Code 

/*玄学RE 看来define ll long long 也有bug*/
#include<bits/stdc++.h>
#define ll long long
#define double
#define dbg1(x) cerr<<#x<<"="<<(x)<<" "
#define dbg2(x) cerr<<#x<<"="<<(x)<<"\n"
#define dbg3(x) cerr<<#x<<"\n"
using namespace std;
#define reg register
#define Z(x) memset(x,0,sizeof x)
inline ll read()
{
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
const int MN=2e5+5;
ll n,m,a[MN],b[MN];bool mk[MN];
std::vector<int> G[MN]; ll len,c[MN<<1],la[MN];bool vis[MN];
void getcir(int x)
{
len=0;int y;
for(;;la[y]=x,vis[y]=1,x=y)
{
y=a[x];
if(vis[y])
{
for(c[++len]=y;x^y;x=la[x])c[++len]=x;
return;
}
}
} ll d[MN],ans;
void dfs(int x,int fa,int no=0)
{
int i;mk[x]=1;
for(i=G[x].size()-1;~i;--i)if((G[x][i]^fa)&&(G[x][i]^no))
{
dfs(G[x][i],x);
if(d[G[x][i]]+b[G[x][i]]>m) ++ans;
else d[x]=max(d[x],d[G[x][i]]+b[G[x][i]]);
}
} ll f[20][MN],q[MN<<1],l,r,s[MN<<1];
void Push(int i){for(;r>=l&&d[c[q[r]]]-s[q[r]]<=d[c[i]]-s[i];--r);q[++r]=i;}
ll cal(ll x,ll y)
{
ll _=len,tmp=0;
for(int i=y;~i;--i)
if(f[i][x]<_)tmp+=1<<i,_-=f[i][x],x=(x+f[i][x]-1)%len+1;
return tmp+1;
} void solve(int O)
{
reg int i,j;
len=0;getcir(O);
for(i=1;i<=len;++i)dfs(c[i],0,c[i%len+1]);
reverse(c+1,c+len+1);
for(i=1;i<=len;++i)c[i+len]=c[i];
for(i=2;i<=len*2;++i)s[i]=s[i-1]+b[c[i-1]]; for(q[l=r=1]=i=j=1;i<=len;++i)
{
for(;r>=l&&q[l]<i;++l);if(r<l)q[++r]=++j;
for(;j<i+len&&s[j]-s[q[l]]+d[c[q[l]]]<=m;++j,Push(j));
if(j==i+len){++ans;return;}f[0][i]=j-i;
}
ll Add=n,fl=0;
for(i=1;i<20;++i)
{
for(j=1;j<=len;++j)
{
f[i][j]=f[i-1][j]+f[i-1][(j+f[i-1][j]-1)%len+1];
if(f[i][j]>=len-1) Add=min(Add,cal(j,i));
}
if(Add^n){ans+=Add;return;}
}
} int main()
{
#ifndef LOCAL
freopen("flag.in","r",stdin);
freopen("flag.out","w",stdout);
#endif
int Case=read();
while(Case--)
{
Z(d);ans=0;Z(vis);Z(mk);
n=read(),m=read();
reg int i;
for(i=1;i<=n;++i) G[i].clear();
for(i=1;i<=n;++i)
a[i]=read(),b[i]=read(),G[a[i]].push_back(i);
for(i=1;i<=n;++i)if(!mk[i])solve(i);
printf("%lld\n",ans);
}
return 0;
}

Blog来自PaperCloud,未经允许,请勿转载,TKS!

「2019-8-11提高模拟赛」女装盛宴 (flag)的更多相关文章

  1. #10471. 「2020-10-02 提高模拟赛」灌溉 (water)

    题面:#10471. 「2020-10-02 提高模拟赛」灌溉 (water) 假设只有一组询问,我们可以用二分求解:二分最大距离是多少,然后找到深度最大的结点,并且把它的\(k\)倍祖先的一整子树删 ...

  2. #10470. 「2020-10-02 提高模拟赛」流水线 (line)

    题面:#10470. 「2020-10-02 提高模拟赛」流水线 (line) 题目中的那么多区间的条件让人感觉极其难以维护,而且贪心的做法感觉大多都能 hack 掉,因此考虑寻找一些性质,然后再设计 ...

  3. 「2019-8-13提高模拟赛」树 (tree)

    传送门 Description 你有一个 \(n\)个点的树,第 \(i\)个点的父亲是\(p_i\).每个点有一个权值 \(t_i\) 和一个颜色黑或者白.所有点一开始都是白色. 你要进行 \(m\ ...

  4. 「CSP-S模拟赛」2019第四场

    「CSP-S模拟赛」2019第四场 T1 「JOI 2014 Final」JOI 徽章 题目 考场思考(正解) T2 「JOI 2015 Final」分蛋糕 2 题目 考场思考(正解) T3 「CQO ...

  5. 『2019/4/9 TGDay2模拟赛 反思与总结』

    2019/4/9 TGDay2模拟赛 今天是\(TG\)模拟赛的第二天了,试题难度也是相应地增加了一些,老师也说过,这就是提高组的难度了.刚开始学难的内容,一道正解也没想出来,不过基本的思路也都是对了 ...

  6. 『2019/4/8 TGDay1模拟赛 反思与总结』

    2019/4/8 TGDay1模拟赛 这次是和高一的学长学姐们一起参加的\(TG\)模拟考,虽然说是\(Day1\),但是难度还是很大的,感觉比\(18\)年的\(Day1\)难多了. 还是看一下试题 ...

  7. 9.11 myl模拟赛

    9.11 myl 模拟赛 100 + 100 + 0 第一题耗费了太多的时间,导致最后一题没有时间想,直接去写了暴力,而且出题人没有给暴力分.... Problem 1. superman [题目描述 ...

  8. 「NOIP模拟赛」数位和乘积(dp,高精)

    统计方案数,要么组合数,要么递推(dp)了. 这是有模拟赛历史以来爆炸最狠的一次 T1写了正解,也想到开long long,但是开错了地方然后数组开大了结果100->0 T3看错题本来简单模拟又 ...

  9. 「Vijos 1284」「OIBH杯NOIP2006第二次模拟赛」佳佳的魔法阵

    佳佳的魔法阵 背景 也许是为了捕捉猎物(捕捉MM?),也许是因为其它原因,总之,佳佳准备设计一个魔法阵.而设计魔法阵涉及到的最关键问题,似乎就是那些带有魔力的宝石的摆放-- 描述 魔法阵是一个\(n ...

随机推荐

  1. 利用jQuery-Word-Export导出word (含ECharts)

      写在前面的话:写博客的初衷是想把自己学到的知识总结下来,在写的过程中,相当于又把知识梳理了一遍.我坚信有输入,有输出,技术才会进步.我一般都会自己写一个小demo,测试没有问题,再进行整理. 在实 ...

  2. [SDOI2008]仪仗队(欧拉函数)

    题目 [SDOI2008]仪仗队 解析 这个题,我也不知道他们的soltion是怎么写的这么长的. 我们发现我们一次看一条直线上的第一个点,也就是说,若两个点斜率\(k=\frac{y}{x}\)相同 ...

  3. Privoxy搭建代理服务器

    Privoxy搭建代理服务器 Docker Hub镜像地址 Dockerfile FROM alpine EXPOSE 8118 RUN apk --no-cache --update add pri ...

  4. Android为TV端助力之无法依赖constraint-layout:1.1.3(转发)

    原文地址 http://fanjiajia.cn/2018/09/25/Android%20Studio%20Could%20not%20resolve%20com.android.support.c ...

  5. 肖哥HCNP-正式篇笔记

    21.网工学习环境准备. 一. 关掉所有杀毒软件及管家如阿健. 二. 安装环回网卡 (一定要先安装.) 1. 计算机设备管理 2. 在右侧最上端计算机名上方右键,点击过时硬件. 3. 下一步.手动选择 ...

  6. Linux操作系统之更改启动菜单的背景图实战案例

    Linux操作系统之更改启动菜单的背景图实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.制作图像并上传到服务器 1>.使用window 10操作系统自带的画图工具 ...

  7. 查找正在运行的nginx目录

    linux系统因为备份.不同版本等问题,导致ECS Linux上存放有多个Nginx目录,可以通过如下方法定位当前正在运行的Nginx的配置文件: 1. 查看nginx的PID,以常用的80端口为例: ...

  8. PAT甲级1002水题飘过

    #include<iostream> #include<string.h> using namespace std; ]; int main(){ int n1, n2; wh ...

  9. Python使用pip安装Numpy模块

    安装Numpy模块一般有两种安装方法: 一:下载模块对应的.exe文件,直接双击运行安装 二:下载模块对应的.whl文件,使用pip安装 对于exe文件的安装比较简单,都是双击运行,这里就不说了. 这 ...

  10. 使用SecureCRT操作linux系统时候的简单设置

    因为第一次访问一台虚拟机的时候会出现这样的情况;   底色为白色和乱码的情况 需要在选项----->会话选项中进行一些设置 用来解决乱码问题的这个设置为: