Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #include<iostream>
- #include<math.h>
- #include<vector>
- #include<set>
- #include<queue>
- #include<algorithm>
- #include<cstring> //for memset
- using namespace std;
- #define lli int long long
- #define ull unsigned long long
- #define ld long double
- #define pi acos(-1)
- #define pb push_back
- #define pbk pop_back
- #define mp make_pair
- #define ff first
- #define ss second
- #define pii pair<int,int>
- #define gcd(a,b) __gcd(a,b)
- #define lcm(a,b) (a/gcd(a,b))*b
- #define READ freopen("in.txt","r",stdin);
- #define WRITE freopen("outer.txt","w",stdout);
- //#define sort(t) sort(t.begin(),t.end())
- #define mem(a,b) memset(a,b,sizeof a)
- #define sf scanf
- #define pf printf
- #define cs(p) printf("Case %d: ", ++(p))
- #define dist(ax,ay,bx,by) sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by))
- #define MM 100003
- #define inf 10000000000000000+7
- #define M 1000000002
- #define MINI -1000000003
- //const int fx[]={+1,-1,+0,+0};
- //const int fy[]={+0,+0,+1,-1};
- //const int fx[]={+0,+0,+1,-1,-1,+1,-1,+1}; // Kings Move
- //const int fy[]={-1,+1,+0,+0,+1,+1,-1,-1}; // Kings Move
- //#define for(i,a,n) for(int i=a;i<n;i++)
- //it=myset.find(20);
- //int a[8]= {0,0,-1,1,-1,1,-1,1};
- //int b[8]= {-1,1,0,0,-1,1,1 ,-1};
- vector<int>v1[100005],v2[100005];
- bool vis[100005],vis2[100005];
- int y,dis[100005],dis2[100005];
- int bfs1(int s,int p)
- {
- vis[s]=1;
- queue<int>q;
- q.push(s);
- if(p==1)
- dis[s]=0;
- while(!q.empty())
- {
- int u=q.front();
- q.pop();
- y=u;
- //cout<<u<<endl;
- for(int i=0;i<v1[u].size();i++)
- {
- int r=v1[u][i];
- if(vis[r]==0)
- {
- if(p==1)
- dis[r]=dis[u]+1;
- vis[r]=1;
- q.push(r);
- }
- }
- }
- return y;
- }
- int bfs2(int s,int p)
- {
- vis2[s]=1;
- queue<int>q;
- q.push(s);
- if(p==1)
- dis2[s]=0;
- while(!q.empty())
- {
- int u=q.front();
- q.pop();
- y=u;
- for(int i=0;i<v2[u].size();i++)
- {
- int r=v2[u][i];
- if(vis2[r]==0)
- {
- if(p==1)
- dis2[r]=dis2[u]+1;
- vis2[r]=1;
- q.push(r);
- }
- }
- }
- return y;
- }
- int main()
- {
- int i,j,k,n,u,v,m;
- cin>>n;
- for(i=0;i<n-1;i++)
- {
- cin>>u>>v;
- v1[u].pb(v);
- v1[v].pb(u);
- }
- cin>>m;
- for(i=0;i<m-1;i++)
- {
- cin>>u>>v;
- v2[u].pb(v);
- v2[v].pb(u);
- }
- int ly=bfs1(1,0);
- memset(vis,0,sizeof vis);
- int ly2=bfs1(ly,1);
- int ll=bfs2(1,0);
- memset(vis2,0,sizeof vis2);
- int ll2=bfs2(ll,1);
- int pr1=dis[ly2]+1;
- int pr2=(dis2[ll2]/2)+1;
- if(pr2<pr1)
- cout<<"GGEZ"<<endl;
- else cout<<"FF"<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement