zoukankan      html  css  js  c++  java
  • 2019 ICPC 徐州网络赛 B.so easy (并查集)

    计蒜客链接:https://nanti.jisuanke.com/t/41384

    题目大意:给定n个数,从1到n排列,其中有q次操作,操作(1) 删除一个数字 // 操作(2)求这个数字之后第一个没有被删除的数字(包括自己)。

    题解:考虑到实践复杂度问题,n范围是1e9,而q的范围是1e6,所以可以从q入手。用并查集的思路模拟出一个链表,用hashmap存储一个数距离它最近没有被删除的数(即并查集的父亲节点),初始化每个点的map的value存储下一个没有被删除的点,若删除一次,则x的父亲节点变为x+1的父亲,依次以并查集的思想递归下去。

    AC代码:

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #define inf 0x3f3f3f3f
    #include<tr1/unordered_map>
    using namespace std::tr1;
    unordered_map<int,int> m;//hashmap 
    int findfa(int x){//并查集find函数 
    	if(!m.count(x)){
    		return x;
    	}
    	else{
    		return m[x] = findfa(m[x]);
    	}
    }
    int main(){
    	int n,q;
    	scanf("%d%d",&n,&q);
    	while(q--){
    		int z,x;
    		scanf("%d%d",&z,&x);
    		if(z==1){
    			m[x] = findfa(x+1);
    		}
    		else{
    			if(m.count(x) == 0){
    				printf("%d
    ",x);
    			}
    			else{
    				int res = findfa(x);
    				if(res>n){
    					printf("%d
    ",-1);
    				}
    				else{
    					printf("%d
    ",res);
    				}
    			}
    		} 
    	}
    	return 0;
    }
    
  • 相关阅读:
    es6之Promise
    es6之Proxy,Reflect
    js之对象
    Set,Map与Array,Object对比
    es6之数据结构 set,WeakSet,mapWeakMap
    es6之Symbol
    flex布局
    盒子模型,top和margin-top
    POJ1274-The Perfect Stall
    Codeforces 671D. Roads in Yusland 题解
  • 原文地址:https://www.cnblogs.com/AaronChang/p/12129627.html
Copyright © 2011-2022 走看看