TYVJ 1863 [Poetize I]黑魔法师之门

背景
  经过了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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值