zoukankan      html  css  js  c++  java
  • 【思路】Gym

    套娃形成一些链形结构,给你套娃的初始状态和目标状态,问你需要几步(将最外层套娃打开,以及将一整套套娃塞进一个空套娃都算一步)才能达到。

    容易发现,只有每条链链尾的匹配段可以不拆,其他的都得拆开。

    #include<cstdio>
    using namespace std;
    int n,ra[100010],rb[100010],fa[100010],fb[100010],sa[100010],sb[100010];
    int ans1,ans2;
    void df1(int rt,int U){
    	ra[U]=rt;
    	if(sa[U]){
    		df1(rt,sa[U]);
    	}
    }
    void df2(int rt,int U){
    	rb[U]=rt;
    	if(sb[U]){
    		df2(rt,sb[U]);
    	}
    }
    int main(){
    	int x;
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i){
    		scanf("%d",&x);
    		if(x){
    			fa[i]=x;
    			sa[x]=i;
    			++ans1;
    		}
    	}
    	for(int i=1;i<=n;++i){
    		if(!fa[i]){
    			df1(i,i);
    		}
    	}
    	for(int i=1;i<=n;++i){
    		scanf("%d",&x);
    		if(x){
    			++ans2;
    			fb[i]=x;
    			sb[x]=i;
    		}
    	}
    	for(int i=1;i<=n;++i){
    		if(!fb[i]){
    			df2(i,i);
    		}
    	}
    	for(int i=1;i<=n;++i){
    		if(!sa[i] && !sb[i]){
    			int U1=fa[i],U2=fb[i];
    			while(U1 && U2 && U1==U2){
    				--ans1;
    				--ans2;
    				U1=fa[U1];
    				U2=fb[U2];
    			}
    		}
    	}
    	printf("%d
    ",ans1+ans2);
    	return 0;
    }
  • 相关阅读:
    洛谷P2050 美食节
    洛谷P2150 寿司晚宴
    区间最深LCA
    三层交换机
    VLAN 及 GVRP 配置
    GVRP
    VLAN IEEE802.1Q
    以太网端口技术
    网关与路由器
    Quidway S系列交换机
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/7214344.html
Copyright © 2011-2022 走看看