1 solutions

  • 0
    @ 2025-11-5 15:29:28

    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

    Information

    ID
    16849
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By