Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define filer() freopen("in.txt","r",stdin)
- #define filew() freopen("out.txt","w",stdout)
- #include<iostream>
- #include<stdio.h>
- #include<string.h>
- #include<math.h>
- #include<algorithm>
- #include<queue>
- #include<stack>
- #include<string>
- #include<vector>
- #include <map>
- #define INF 1<<29
- #define PI pair<int,int>
- #define f first
- #define s second
- #define SET(a, x) memset((a), (x), sizeof(a))
- #define pb push_back
- #define i64 long long
- #define MAXN 100000
- #define EPS (1e-9)
- using namespace std;
- typedef vector<int> VI;
- typedef vector<PI> vii;
- //i64 INF=(i64)((i64)1<<(i64)59);
- int N,Q;
- vector<int>adj[100009];
- struct node
- {
- int x,y,ans;
- }query[MAXN+10];
- vector<int>B[MAXN+10];
- int vst[MAXN+10];
- void DFS(int u)
- {
- vst[u]=1;
- int i,j,sz,v,ind,t;
- sz=B[u].size();
- for(i=0;i<sz;i++)
- {
- ind=B[u][i];
- if(query[ind].x==u)
- {
- v=query[ind].y;
- t=1;
- }
- else
- {
- v=query[ind].x;
- t=-1;
- }
- if(vst[v]==1)query[ind].ans=t;
- }
- sz=adj[u].size();
- for(i=0;i<sz;i++)
- {
- v=adj[u][i];
- if(!vst[v])
- {
- DFS(v);
- }
- }
- vst[u]=2;
- }
- int main()
- {
- //filer();
- int T,cas=0;
- int i,j,root,x,y;
- scanf("%d%d",&N,&Q);
- scanf("%d",&root);
- for(i=1;i<N;i++)
- {
- scanf("%d%d",&x,&y);
- adj[x].pb(y);
- //adj[y].pb(x);
- }
- for(i=0;i<Q;i++)
- {
- scanf("%d%d",&query[i].x,&query[i].y);
- query[i].ans=0;
- B[query[i].x].pb(i);
- B[query[i].y].pb(i);
- }
- DFS(root);
- for(i=0;i<Q;i++)printf("%d\n",query[i].ans);
- return 0;
- }
- /*
- Test Case:
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement