博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数石子【并查集】
阅读量:6677 次
发布时间:2019-06-25

本文共 1431 字,大约阅读时间需要 4 分钟。

样例输入

10 5 5

1 5 4
2 5 4
3 6 5
1 9 9
6 6 2
1 9
2 6
1 2
3 5
1 7

样例输出

9

6
1
3
UNKNOWN

 

 

看到这种题一开始以为是线段树后来发现不能存区间然后我就不知道其他方法了……终于被告知是并查集(从来没有做过这种题!)

引用 由于是区间合并,但是你无法确定他们之间的关系,所以应该想到并查集将他们联系起来(巧妙啊!又学到了新知识!)

fa1=fa2的时候是这样的

比如a_________________c (权值10)

                  b__________c (6)

     a______b (4)

    我把前两个连接起来后 有 dist[a]:=-10;dist[b]:=-6;fa[a]:=c;fa[b]:=c;

    加上第三个以后有 fa1:=c;fa2:=c;

                            dist[fa1]:=dist[r]-dist[l]-x 就应该是 dist[c]=dist[b]-dist[a]-4=-6+10-4=0

program p36;

var
  dist,fa:array[0..5001] of longint;
  n,m,k:longint;

function find(x:longint):longint;

var tem:longint;
begin
  if (fa[x]=x) then exit(x);
  tem:=fa[x];
  fa[x]:=find(fa[x]);
  if (fa[x]<>tem) then dist[x]:=dist[x]+dist[tem];
  exit(fa[x]);
end;
 
procedure insert(l,r,x:longint);
var fa1,fa2:longint;
begin
  fa1:=find(l);
  fa2:=find(r);
  fa[fa1]:=fa2;
  dist[fa1]:=dist[r]-dist[l]-x;
end;

procedure init;

var l,r,x,i:longint;
begin
  assign(input,'p36.in');reset(input);
  assign(output,'p36.out');rewrite(output);
  fillchar(dist,sizeof(dist),0);
  readln(n,m,k);
  for i:=1 to n do fa[i]:=i;
  for i:=1 to m do begin
    readln(l,r,x);
    insert(l-1,r,x);
  end;
end;

procedure main;

var i,l,r,fa1,fa2:longint;
begin
  for i:=1 to k do begin
    readln(l,r);
    fa1:=find(l-1);
    fa2:=find(r);
    if (fa1<>fa2) then writeln('UNKNOWN') else writeln(dist[r]-dist[l-1]);
  end;
end;

procedure terminate;

begin
  close(input);close(output);
end;

begin

  init;
  main;
  terminate;
end.

 

 

转载于:https://www.cnblogs.com/ushiojamie/archive/2011/11/04/2236590.html

你可能感兴趣的文章
android面试题及答案
查看>>
Linux下全局符号覆盖问题
查看>>
【iScroll源码学习02】分解iScroll三个核心事件点
查看>>
【流量劫持】SSLStrip 的未来 —— HTTPS 前端劫持
查看>>
UML图学习之三 状态图
查看>>
JAVA Oauth 认证服务器的搭建
查看>>
python的模式匹配 - 正则表达式
查看>>
新浪微博客户端(24)-计算原创微博配图frame
查看>>
macOS SIP 权限设置
查看>>
使用Cubic Spline通过一组2D点绘制平滑曲线
查看>>
读Ext之八(原生事件对象的修复及扩充)
查看>>
权限设计的三层境界续
查看>>
蓝点中文_Linux2.0 实验九 目录与文件管理 (一)
查看>>
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(16)-权限管理系统-漂亮的验证码...
查看>>
【总目录】本博客博文总目录-实时更新
查看>>
Razor语法大全
查看>>
Serlvet学习笔记之二—不同页面共享数据
查看>>
Css3 - 动画旋转
查看>>
[Angular 2] Handling Click Events with Subjects
查看>>
django-redis和redis-py
查看>>