JZOJ 100026. 【NOIP2017提高A组模拟7.7】图
Description
有一个n个点n条边的有向图,每条边为< i,f(i),w(i)>,意思是i指向f(i)的边权为w(i)的边,现在小A想知道,对于每个点的si和mi。
si:由i出发经过k条边,这k条边的权值和。
mi:由i出发经过k条边,这k条边的权值最小值。
Input
第一行两个数n和k
第二行n个数f(i)
第三行n个数w(i)
Output
每行两个数si和mi
Sample Input
7 3
1 2 3 4 3 2 6
6 3 1 4 2 2 3
Sample Output
10 1
8 1
7 1
10 2
8 2
7 1
9 3
Data Constraint
30%的数据:n,k<=1000。
100%的数据:N<=10^5,k<=10^10,0<=f(i)
Hint
Solution
观察到每个点的出边只有一条,那说明一个点运动的路径是固定不变的。
由于 K 的范围太大,直接模拟是不可能的,于是我们想到倍增算法。
设 F[i][j]F[i][j] 表示第 ii 个点、运动了 2j2^j 个点的状态。
开三个域 toto , sumsum , mnmn 分别表示其到的点、权值和 和 最小值 。
之后倍增求出 F 数组,再每个点 O(logK)O(logK) 走一遍即可 。
这样的时间复杂度是 O(NlogK)O(NlogK) ,可以通过本题。
Code
#include<cstdio>
#include<cmath>
using namespace std;
const int N=100001;
struct data
{int to,mn;long long sum;
}g[N][35];
long long k;
int f[N],w[N];
long long p[35];
inline int read()
{int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w;
}
inline int min(int x,int y)
{return x<y?x:y;
}
int main()
{int n=read();scanf("%lld",&k);int t=log2(k);for(int i=p[0]=1;i<=t;i++) p[i]=p[i-1]*2;for(int i=0;i<n;i++) g[i][0].to=f[i]=read();for(int i=0;i<n;i++) g[i][0].sum=g[i][0].mn=w[i]=read();for(int j=1;j<=t;j++)for(int i=0;i<n;i++){g[i][j].to=g[g[i][j-1].to][j-1].to;g[i][j].sum=g[i][j-1].sum+g[g[i][j-1].to][j-1].sum;g[i][j].mn=min(g[i][j-1].mn,g[g[i][j-1].to][j-1].mn);}for(int i=0;i<n;i++){long long s=0,x=k;int m=1e8,pos=i;for(int j=t;j>=0 && x;j--)if(x>=p[j]){x-=p[j];m=min(m,g[pos][j].mn);s+=g[pos][j].sum;pos=g[pos][j].to;}printf("%lld %d\n",s,m);}return 0;
}
JZOJ 100026. 【NOIP2017提高A组模拟7.7】图相关推荐
- JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫
Description 信息组最近猫成灾了!隔壁物理组也拿猫没办法.信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数),编号为1 到n,站成了一个环,第i 只猫的左边是第i ...
- JZOJ 5392. 【NOIP2017提高A组模拟10.5】Lucky Transformation
Description Input Output Sample Input 7 2 2343223 4 1 2234 Sample Output 2243233 2334 Data Constrain ...
- JZOJ 5371. 【NOIP2017提高A组模拟9.17】组合数问题
Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数.举个例子,将{1,2,3}拆分成2 个集合有({1},{2,3}),({2},{1,3}),({3 ...
- JZOJ 100047. 【NOIP2017提高A组模拟7.14】基因变异
Description 21 世纪是生物学的世纪,以遗传与进化为代表的现代生物理论越来越多的 进入了我们的视野. 如同大家所熟知的,基因是遗传因子,它记录了生命的基本构造和性能. 因此生物进化与基因的 ...
- JZOJ 100041. 【NOIP2017提高A组模拟7.12】列车调度
Description Input Output Sample Input Sample1: 3 1 2 3 Sample2: 9 1 3 2 4 8 6 9 5 7 Sample Output Sa ...
- JZOJ 100030. 【NOIP2017提高A组模拟7.8】为了爱情
Description Input 输入文件第一行包含一个正整数 k.之后是 k 组测试用例. 每组测试用例的第一行为一个整数 n.接下来 n 行,每行 n 个以空格隔开的数,用来 描述棋盘的初始状态 ...
- JZOJ 5402. 【NOIP2017提高A组模拟10.8】God Knows
Description Input Output Sample Input 5 3 1 4 5 2 3 4 3 4 1 Sample Output 5 Data Constraint Solution ...
- JZOJ 5405. 【NOIP2017提高A组模拟10.10】Permutation
Description 你有一个长度为n 的排列P 与一个正整数K 你可以进行如下操作若干次使得排列的字典序尽量小 对于两个满足|i-j|>=K 且|Pi-Pj| = 1 的下标i 与j,交换P ...
- JZOJ 5404. 【NOIP2017提高A组模拟10.10】Graph
Description 给定一张n个点m条边的无向图,每条边连接两个顶点,保证无重边自环,不保证连通 你想在这张图上进行若干次旅游,每次旅游可以任选一个点x作为起点,再走到一个与x 直接有边相连的点y ...
最新文章
- Hyper-V 网卡 load failed
- element ui点击按钮弹出款_前端猿应该知道的十大最流行的前端UI框架
- 导出来的双引号怎么处理_阿里巴巴国际站图片处理小技巧
- vivo C/C++工程师视频面试总结 20180802
- Jar包冲突解决方法
- PPT写的好,升职加薪不会少-全套免费教程
- Google Drive 转存别人分享的文件到自己的网盘
- uniapp 最接近微信的图片压缩插件 Ba-ImageCompressor
- 二叉树的几个基本性质
- O2O模式为什么这么火
- python爬取美女_知乎大神用Python爬取高颜值美女(Python爬虫+人脸检测+颜值检测)...
- 【嵌入式04】用寄存器HAL库完成LED流水灯程序
- java加载顺序_类加载过程中几个重点执行顺序整理
- windows num_workers
- 使用余弦相似度算法计算文本相似度
- Python3快速入门-Python是什么
- 数字是有绝对值的,负数的绝对值是它本身取反,非负数的绝对值是它本身。 请定义一个方法,方法能够得到小数类型数字的绝对值并返回。 请定义方法并测试
- 存储技术现在的困境以及未来的发展
- 2023年浙江大学报考点硕士研究生报名网上确认公告
- IBus Pinyin 导入Sougou词库
热门文章
- 单层感知器应用实例--坐标点的二分类模式分类
- Maple 公式推导
- USTC English Club Note20171013(5)
- 【无标题】科大星云诗社动态20201206
- 科大星云诗社动态20201215
- [:zh]给机械课程设计的一封信[:] 2017-12-23
- 云炬Android开发笔记 2-1项目初始化
- 火爆 GitHub 的 16 张机器学习速查表,值得收藏!
- 台湾大学林轩田机器学习技法课程学习笔记5 -- Kernel Logistic Regression
- 计算广告 pdf_小学生PDF格式的试卷怎么编辑修改