题意:

在遥远的S星系中一共有N个星球,编号为1…N。其中的一些星球决定组成联盟,以方便相互间的交流。

但是,组成联盟的首要条件就是交通条件。初始时,在这N个星球间有M条太空隧道。每条太空隧道连接两个星球,使得它们能够相互到达。若两个星球属于同一个联盟,则必须存在一条环形线路经过这两个星球,即两个星球间存在两条没有公共隧道的路径。

为了壮大联盟的队伍,这些星球将建设P条新的太空隧道。这P条新隧道将按顺序依次建成。一条新轨道建成后,可能会使一些星球属于同一个联盟。你的任务是计算出,在一条新隧道建设完毕后,判断这条新轨道连接的两个星球是否属于同一个联盟,如果属于同一个联盟就计算出这个联盟中有多少个星球。

对于100%的数据有1≤N,M,P≤200000。

思路:

据说还可以用LCT+并查集维护连通性与size大小

 var q,fa,size,f,a,b,c,h,head,vet,next,x,y:array[..]of longint;
n,m,p,i,j,u,e,v,t,tot,z,w:longint; procedure add(a,b:longint);
begin
inc(tot);
next[tot]:=head[a];
vet[tot]:=b;
head[a]:=tot;
end; function find(k:longint):longint;
begin
if k=f[k] then exit(k);
f[k]:=find(f[k]);
exit(f[k]);
end; function lca(x,y:longint):longint;
var t:longint;
begin
x:=find(x); y:=find(y);
if x=y then exit(x);
if h[x]>h[y] then
begin
t:=lca(fa[x],y); size[t]:=size[t]+size[x]; f[x]:=f[t];
end;
if h[x]<=h[y] then
begin
t:=lca(fa[y],x); size[t]:=size[t]+size[y]; f[y]:=f[t];
end;
exit(t);
end; begin
assign(input,'bzoj4998.in'); reset(input);
assign(output,'bzoj4998.out'); rewrite(output);
readln(n,m,p);
for i:= to m do read(x[i],y[i]);
for i:= to p do
begin
read(x[m+i],y[m+i]);
b[m+i]:=;
end;
m:=m+p;
for i:= to n do f[i]:=i;
for i:= to m do
begin
u:=x[i]; v:=y[i];
if find(u)=find(v) then continue;
f[f[u]]:=f[v]; c[i]:=;
add(u,v); add(v,u);
end;
for i:= to n do
begin
if h[i]> then continue;
t:=; w:=; q[]:=i; h[i]:=;
while t<w do
begin
inc(t); u:=q[t];
e:=head[u];
while e<> do
begin
v:=vet[e];
if h[v]= then
begin
inc(w); q[w]:=v; h[v]:=h[u]+; fa[v]:=u;
end;
e:=next[e];
end;
end;
end;
for i:= to n do
begin
f[i]:=i; size[i]:=;
end;
//for i:= to n do writeln(h[i]);
//for i:= to m do writeln(c[i]);
for i:= to m do
begin
if c[i]= then
begin
if b[i]= then writeln('No');
continue;
end;
z:=lca(x[i],y[i]);
// writeln(z);
if b[i]= then writeln(size[z]);
end; close(input);
close(output);
end.

最新文章

  1. 点击input框,不让手机软键盘弹出的办法
  2. JSP EL表达式
  3. android中获取string字符串的方法
  4. servlet学习笔记三
  5. delphi 窗口最大化后控件的大小变化怎么设置
  6. apt局域网源搭建
  7. CentOS 6.5安装之后的网络配置
  8. Dapper数据库相关操作
  9. 《Java面向对象设计》
  10. 关于react-native在MacBookPro环境下的安装
  11. JAVA中static的作用
  12. c# 对DataTable进行分组group by
  13. odoo仓库单据产品过滤写法
  14. java对象与map对象相互转换
  15. C#更新程序设计
  16. django默认后台使用
  17. CSS| font property
  18. Orchard之创建列表
  19. [转载] MySQL 注入攻击与防御
  20. 携程greenlet模块使用

热门文章

  1. 枚举Enum通过int值或文本转为对应的枚举类型
  2. jvm 脑图
  3. &#39;NSUnknownKeyException&#39; … setValue:forUndefinedKey:]: …not key value coding compliant
  4. xcode 通配搜索
  5. swift class type isa-swizzling
  6. vim里面搜索字符串
  7. 模态对话框与非模态对话框(modeless)
  8. Q币直充-迅银渠道商(php 面向对象类)
  9. 【Hadoop】一、分布式数据库HBase简介
  10. Ubuntu中update-grub2与update-grub的区别