zoukankan      html  css  js  c++  java
  • Luogu P1196 银河英雄传说

    Luogu P1196 银河英雄传说

    我们考虑用并查集来维护战舰的情况。
    同时,我们用一个$d$数组来记录$x$与$fa[x]$之间的距离。再用$size$数组记录战舰当前所在列的战舰数。
    易知两艘在同一列的战舰之间隔着$|d[x]-d[y]|-1$艘战舰。

    #include<bits/stdc++.h>
    #define N 30010
    
    using namespace std;
    
    int t,x,y;
    int fa[N],d[N],size[N];
    char op;
    
    int Find(int x) {
    	if(fa[x]==x) {
    		return x;
    	}
    	int root=Find(fa[x]);
    	d[x]+=d[fa[x]];
    	return fa[x]=root;
    }
    
    void Init() {
    	for(int i=1;i<=30000;i++) {
    		fa[i]=i;
    		size[i]=1;
    	}
    	return;
    }
    
    void Merge(int x,int y) {
    	int fx=Find(x),fy=Find(y);
    	d[fx]+=size[fy];
    	fa[fx]=fy;
    	size[fy]+=size[fx];
    	return;
    }
    
    void Judge(int x,int y) {
    	int fx=Find(x),fy=Find(y);
    	if(fx==fy) {
    		printf("%d
    ",abs(d[x]-d[y])-1);
    	}
    	else {
    		printf("-1
    ");
    	}
    	return;
    }
    
    void Work() {
    	cin>>op>>x>>y;
    	if(op=='M') {
    		Merge(x,y);
    	}
    	else if(op=='C') {
    		Judge(x,y);
    	}
    	return;
    }
    
    int main()
    {
    	Init();
    	scanf("%d",&t);
    	for(int i=1;i<=t;i++) {
    		Work();
    	}
    	return 0;
    }
    
  • 相关阅读:
    不知道是不是爬虫
    springCloud 搭建Eureka
    HttpsUtils
    java验证
    复选框值存数据库 存取问题
    Oracle VM VirtualBox 无法链接本地
    ssh 无法查询数据库
    CSS 分割线
    vue+Element 表格编辑
    数组,对象的深拷贝 与 浅拷贝
  • 原文地址:https://www.cnblogs.com/luoshui-tianyi/p/11729709.html
Copyright © 2011-2022 走看看