1 solutions
-
0
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