1 条题解

  • 0
    @ 2025-9-9 23:53:24

    C++ :

    #include<iostream>
    using namespace std;
    const int N = 20005;
    int father[N];
    int f(int x)
    {
    	while (father[x]!=x) x=father[x];
    	return x;
    }
    int main()
    {
    	int n,m,x,y,k1,k2;
    	cin>>n>>m;
    	for (int i=1;i<=n;i++) father[i]=i;
    	for (int i=1;i<=m;i++){
    		cin>>x>>y;
    		k1=f(x);
    		k2=f(y);
    		if (k1!=k2) father[k2]=k1;
    	}
    	int q;
    	cin>>q;
    	for (int i=0;i<q;i++){
    		cin>>x>>y;
    		if (f(x)==f(y)) cout<<"Yes\n";
    		else cout<<"No\n";
    	}
    	return 0;
    }
    

    Pascal :

    program qinqi;
    const maxn=100000;
    var father:array[1..maxn]of integer;
        n,m,p:integer;
    procedure init;
      begin
        fillchar(father,sizeof(father),0);
        read(n,m);
      end;
    function getfather(v:integer):integer;
      begin
        if father [v]=0 then getfather:=v
        else begin
        father [v]:=getfather(father [v]);
        getfather:=father [v];
        end;
      end;
    procedure merge(i,j:integer);
      begin
        i:=getfather(i);
        j:=getfather(j);
        if i<>j then
        father[i]:=j;
      end;
    procedure a;
    var k,i,j:integer;
      begin
        for k:=1 to m do
          begin
            read(i,j);
            merge(i,j);
          end;
        read(p);
        for k:=1 to p do
          begin
            read(i,j);
            if getfather(i)=getfather(j)then writeln('Yes')
            else writeln('No');
          end;
      end;
    begin
    init;
    a;
    end.
    
    • 1

    信息

    ID
    1586
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者