您的位置:首页 > 大数据 > 人工智能

BZOJ4690: Never Wait for Weights

2016-08-27 19:47 531 查看

裸带权并查集。

#include<cstdio>
#define N 100005
int m,i,j,s,t,u,d
,p
;
char k;
int find(int i){
if(p[i]^i&&find(p[i]))
d[i]+=d[p[i]];
return p[i]=p[p[i]];
}
int main(){
while(scanf("%d%d",&s,&m)&&s){
for(;s;--s)
d[p[s]=s]=0;
while(m--){
scanf(" %c%d%d",&k,&s,&t);
i=find(s),j=find(t);
if(k=='!'){
scanf("%d",&u);
p[i]=j;
d[i]=d[t]+u-d[s];
}else if(i^j)
puts("UNKNOWN");
else
printf("%d\n",d[s]-d[t]);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: