码迷,mamicode.com
首页 > Web开发 > 详细

UVA1329 Corporative Network

时间:2019-04-10 11:55:22      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:getc   str   mat   string   std   get   距离   return   space   

思路

用带权并查集维护到根的距离即可

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
int fa[101000],dis[101000],n,T;
void init(void){
    for(int i=1;i<=100000;i++)
        fa[i]=i,dis[i]=0;
}
int find(int x){
    if(fa[x]==x){
        dis[x]=0;
        return x;
    }
    else{
        int t=find(fa[x]);
        dis[x]+=dis[fa[x]];
        return fa[x]=t;
    }
}
void merge(int x,int y){//x->y
    fa[x]=y;
    dis[x]=abs(y-x)%1000;
}
int main(){
    scanf("%d",&T);
    while(T--){
        init();
        scanf("%d",&n);
        char c=getchar();
        while(c!='E'&&c!='I'&&c!='O')
            c=getchar();
        while(c!='O'){
            if(c=='E'){
                int u;
                scanf("%d",&u);
                find(u);
                printf("%d\n",dis[u]);
            }
            else{
                int u,v;
                scanf("%d %d",&u,&v);
                merge(u,v);
            }
            c=getchar();
            while(c!='E'&&c!='I'&&c!='O')
                c=getchar();
        }
    }
    return 0;
}

UVA1329 Corporative Network

标签:getc   str   mat   string   std   get   距离   return   space   

原文地址:https://www.cnblogs.com/dreagonm/p/10682377.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!