zoukankan      html  css  js  c++  java
  • UVALive3027 并查集

    题意:有n个节点,初始时每个节点的父节点都不存在,你的任务是执行一次I操作和E操作,格式如下:
    I u v:把节点u的父节点设为v,距离为|u-v|除以1000的余数。输入保证之星指令前没有父节点
    E u:询问u到根节点的距离

    题意显然是要用并查集

    #include <stdio.h>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    const int MAXN = 20000 + 10;
    int p[MAXN];
    int d[MAXN];
    int findset(int x){
    	if(p[x]!=x){
    		int root = findset(p[x]);
    		d[x] += d[p[x]];
    		return p[x] = root;
    	}
    	else return x;
    }
    int main(){
    //	freopen("in.txt", "r", stdin);
    	int cas;
    	scanf("%d", &cas);
    	while(cas--){
    		int n;
    		scanf("%d", &n);
    		int i;
    		for(i=1; i<=n; i++){
    			p[i] = i;
    			d[i] = 0;		//!清除d数组原有数据,防止混乱
    		}
    		char op[5];
    		while(scanf("%s", &op) && op[0]!='O'){
    			int u, v;
    			if(op[0] == 'I'){
    				scanf("%d%d", &u, &v);
    				p[u] = v;
    				d[u] = abs(u-v)%1000;
    			}
    			if(op[0]=='E'){
    				scanf("%d", &u);
    				findset(u);
    				printf("%d\n", d[u]);
    			}
    		}
    	}
    }



  • 相关阅读:
    中国软件技术篇
    create pdf
    我来了
    补丁号
    rdlc里面用VB语法对数值型数据进行Format
    WinForm中有些控件不能添加ToolTip关联的解决方法
    javascript弹出对话框
    省市县关联菜单
    委托与事件
    ASP.NET多文件上传方案
  • 原文地址:https://www.cnblogs.com/zjutzz/p/3207870.html
Copyright © 2011-2022 走看看