zoukankan      html  css  js  c++  java
  • 题面

    先粘上gouzhi的题面

    题解

    处理出置换中的所有轮换,瞎jb打就OK了

    代码

    #include<cstdio>
    #include<vector> 
    #include<algorithm> 
    const int maxn = 500007;
    using std::vector;
    inline int read() { 
    	int x = 0; 
    	char c = getchar(); 
    	while(c < '0' || c > '9') c = getchar(); 
    	while(c <= '9' && c >= '0')x = x * 10 + c - '0',c = getchar();
    	return x; 
    }
    int a[maxn],bel[maxn],loc[maxn],num = 0,cnt; bool hav[maxn],vis[maxn];  
    vector<int>vec[maxn]; 
    void dfs(int tx,int fa) { 
    	loc[tx] = ++num; 
    	vec[cnt].push_back(tx); bel[tx] = cnt; 
    	if(a[tx] == fa) return; 
    	dfs(a[tx],fa); 
    } 	
    void solve(int x,int m) { 
    	int B = bel[x]; 
    	int size = vec[B].size(); 
    	int ans_loc = (m + loc[x]) % size; 
    	//if(!ans_loc)ans_loc = 1;
    	printf("%d
    ",vec[B][ans_loc]); 
    } 
    int main() { 
    	freopen("kengdie.in","r",stdin); 
    	freopen("kengdie.out","w",stdout); 
    	int n = 0; 
    	for(n = 1;;++ n) { 
    		a[n] = read(); 
    		if(hav[a[n]]) break;hav[a[n]] = true; 	
    	} 
    	for(int i = 1;i < n;++ i) { 
    		//vec[i].push_back(); 
    		if(!bel[i]) { 
    			num = -1; bel[i] = ++ cnt; 
    			dfs(i,i);   
    		} 
    	}	
    	int x = a[n],m = read(); 	
    	solve(x,m);
    	while(scanf("%d%d",&x,&m) == 2) 
    		solve(x,m); 
    	return 0;
    }  
    
    
  • 相关阅读:
    JAVA EE获取浏览器和操作系统信息
    ANT与SVN集成
    ANT property三种使用方式
    跨机器的文件夹访问和传输方法
    yolov5网络结构分析
    点到直线距离计算及g++编译
    深拷贝与浅拷贝(c++和python)
    qt工程环境设置
    Git 篇
    PyCharm 使用的技巧
  • 原文地址:https://www.cnblogs.com/sssy/p/9026607.html
Copyright © 2011-2022 走看看