Description

小R有n部手机,为了便于管理,他对一些手机设置了“呼叫转移”的功能。

具体来说,第 i(1≤i≤n) 部手机有个参数 ai(0≤ai≤n,ai≠i) 。若 ai≠0 则表示第 i 部手机接到电话时会将电话无条件转移给第 ai 部手机(此时如果 aai≠0, 会继续进行呼叫转移)。

如果一部手机接到电话会导致至少 109 次呼叫转移,则这次电话无法接通。

现在有m个事件依次发生,具体如下:

∙1 x y表示将第x部手机的参数设置为y,即将 ax 设置为y ;

∙2 x表示询问给第x部手机打电话,最终接到电话的手机编号(如果无法接通,则输出-1 )。

小R当然知道怎么做啦!但是他想考考你。

Input

输入的第一行有两个整数n, m。保证 1≤n,m≤2∗105 。

接下来一行,包含n个整数,第i个整数为 ai 。

接下来m行,每一行为一个事件,具体格式见问题描述。

对于事件1,保证 1≤x≤n,0≤y≤n,x≠y ;对于事件2,保证 1≤x≤n

Output

对每个询问事件输出一行一个整数,表示最终接到电话的手机编号,如果无法接通,输出-1。

Sample Input

5 6

2 3 4 5 0

2 2

2 5

1 4 3

2 1

1 4 0

2 1

Sample Output

5

5

-1

4

HINT

对于20%的数据, n,m≤5000

对于另外20%的数据,只有2操作

对于所有数据, n,m≤2∗105


正解是LCT…

然而暴力可以过80%的点

然而我却只拿了20分…

注意啊注意啊…

memset这东西是第三次坑我了…

memset跑得真的好慢啊…

#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
const int maxN = (int)2e5;
int fa[maxN + 1];
int vis[maxN + 1];
int main()
{
#ifndef ONLINE_JUDGE
freopen("phone.in", "r", stdin);
freopen("phone.out", "w", stdout);
#endif
ios::sync_with_stdio(false);
int n, m;
cin >> n >> m;
for(int i = 1; i <= n; i ++)
cin >> fa[i];
for(int i = 1; i <= m; i ++)
{
int opt;
cin >> opt;
if(opt == 1)
{
int u, v;
cin >> u >> v;
fa[u] = v;
}
if(opt == 2)
{
int u;
cin >> u;
int flag = 0;
while(1)
{
if(vis[u] == i)
break;
vis[u] = i;
if(! fa[u])
{
flag = 1;
break;
}
u = fa[u];
}
if(! flag)
printf("-1\n");
else
printf("%d\n", u);
}
}
}

小R与手机的更多相关文章

  1. HDU 5967 小R与手机(动态树)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5967 [题目大意] 给出一张图,每个点仅连一条有向边,或者不连, 要求查询在可更改有向边的情况每个 ...

  2. 【BZOJ】【3280】小R的烦恼

    网络流/费用流 和软件开发那题基本相同,只是多加了一个“雇佣研究生”的限制:不同价格的研究生有不同的数量…… 那么只需加一个附加源点,对每一种研究生连边 S->ss 容量为l[i],费用为p[i ...

  3. BZOJ3280: 小R的烦恼

    题解: 随便建一下图费用流就可以过吧... 代码: #include<cstdio> #include<cstdlib> #include<cmath> #incl ...

  4. BZOJ 3280: 小R的烦恼 & BZOJ 1221: [HNOI2001] 软件开发

    3280: 小R的烦恼 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 399  Solved: 200[Submit][Status][Discuss ...

  5. 洛谷 U2878 小R的分数比赛(fraction)

    题目提供者 2015c07 标签 数论(数学相关) 高精度 难度 尚无评定 通过/提交 0/29 提交该题 记录 题目背景 P5难度系数:★★★☆☆ 小R再次挑战你. 这次的挑战又会是什么呢? 题目描 ...

  6. 微信小程序与手机APP区别

    微信小程序与手机APP区别 ------------------<><><><>------------------ 微信小程序自去年年初,张小龙放话要 ...

  7. 【BZOJ3280】小R的烦恼 最小费用最大流

    [BZOJ3280]小R的烦恼 Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要求小R帮助他一起解决一个难题. 问题是这样的 ...

  8. bzoj3280: 小R的烦恼(最小费用最大流)

    Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要 求小R帮助他一起解决一个难题.问题是这样的,程设老师最近要进行一项邪恶的实 ...

  9. 解决微信小程序安卓手机访问不到图片,无法显示图片

    关于微信小程序不显示图片 通病可能有以下几个可能性: 非本地图片:确定图片资源存在,copy 图片url再浏览器打开,确定图片资源存在且能正常访问 本地图片:确定相对路径或者绝对路径正确 微信小程序图 ...

随机推荐

  1. 二叉排序树:HUD3999-The order of a Tree(二叉排序树字典序输出)

    The order of a Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...

  2. poj 3176 三角数和最大问题 dp算法

    题意:给一个三角形形状的数字,从上到下,要求数字和最大 思路 :dp dp[i+1][j]=max(dp[i+1][j],dp[i][j]+score[i+1][j]) dp[i+1][j+1]=ma ...

  3. hdu1787 GCD Again poj 2478 Farey Sequence 欧拉函数

    hdu1787,直接求欧拉函数 #include <iostream> #include <cstdio> using namespace std; int n; int ph ...

  4. cobbler 安装centos7.3时GPT问题(五)

    磁盘分区表MBR和GPT介绍: MBR(Master Boot Record):最大只支持2 TB的盘,最多只支持4个主分区,信息只存储在一个区域. GPT(GUID partition table) ...

  5. [svn学习篇]svn使用教程

    http://www.cnblogs.com/longshiyVip/p/4905901.html http://blog.csdn.net/dily3825002/article/details/6 ...

  6. 【mysql优化 3】嵌套循环连接算法

    原文地址:Nested-Loop Join Algorithms mysql在表之间执行连接操作,包括了使用循环嵌套算法或者其他在此基础上的变形. 循环嵌套连接算法: 一个简单的嵌套循环连接(NLJ: ...

  7. 爬取本blog的所有标题和链接

    #coding=utf-8 from bs4 import BeautifulSoup import urllib.request for i in range(1,54): url = " ...

  8. Golang遇到的问题记录

    1,windows cmd 结束输入问题 func main() { counts := make(map[string]int) countLines(os.Stdin, counts) fmt.P ...

  9. layer弹窗在键盘按回车将反复刷新

      条件:弹窗后不做任何点击操作或者聚焦操作对于layer.load,弹出后反复按回车,load层将不断刷新,即使设置了自动消失也只有等不按回车键才会生效.对于layer iframe层有表单就更糟糕 ...

  10. 天气预报接口:SmartWeather API中key的计算方法

    这个代码大家都蛮感兴趣,我在git开源了一个用于收集天气信息的系统,基于python语言的,请大家参考: https://github.com/BerlinSun/WeatherForecast -- ...