背景
经过了16个工作日的紧张忙碌,未来的人类终于收集到了足够的能源。然而在与Violet星球的战争中,由于Z副官的愚蠢,地球的领袖applepi被邪恶的黑魔法师Vani囚禁在了Violet星球。为了重启Nescafé这一宏伟的科技工程,人类派出了一支由XLk、Poet_shy和lydrainbowcat三人组成的精英队伍,穿越时空隧道,去往Violet星球拯救领袖applepi。
【题目分析】
经过研究发现(证明略去)当两个位置不连通的时候,连通起来。如果连通,ans*2 +1。
然后鬼畜的tyvj c++不过,只有pascal可以过
【代码】
#include <cstdio>
#include <iostream>
using namespace std;
int bc[200001];
int find(int a)
{
if (bc[a]==a) return a;
else{
bc[a]=find(bc[a]);
return bc[a];
}
}
int unnion(int x,int y)
{
bc[find(x)]=find(y);
}
int main()
{
unsigned long long ans=0;
int n,m;
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++)
bc[i]=i;
for (int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
if (find(x)==find(y)) ans=(ans<<1)+1;
else unnion(x,y);
printf("%d\n",ans);
}
}
Pascal
var
i,p,q,x,y,n,m,ans,t:longint;
father:array [1..200010]of longint;
function find(x:longint):longint;
begin
if (father[x]<>x) then father[x]:=find(father[x]);
exit(father[x]);
end;
begin
read(n,m);
t:=1000000009;
ans:=1;
for i:=1 to n do father[i]:=i;
for i:=1 to m do
begin
read(x,y);
p:=find(x);
q:=find(y);
if (p<>q) then father[p]:=q
else ans:=ans*2;
if (ans>t) then ans:=ans-t;
writeln(ans-1);
end;
end.