Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- #define for(i,a,n) for(int i=a; i<n; i++)
- #define mms(matrica,n) memset(matrica,n,sizeof(matrica))
- #define p_b push_back
- #define m_p make_pair
- using namespace std;
- vector<int> sosedstvo[500000];
- string s;
- int n;
- int dokaj=-1;
- int node=0;
- int parent[500000];
- int poc, kra;
- int a,b;
- void gradenje(int tem){
- dokaj++;
- if(dokaj==n)
- return;
- if(dokaj==a) poc=tem;
- else if(dokaj==b) kra=tem;
- if(s[dokaj]=='U'){
- node++;
- parent[node]=tem;
- sosedstvo[tem].p_b(node);
- sosedstvo[node].p_b(tem);
- gradenje(node);
- }
- else if(s[dokaj]=='D'){
- gradenje(parent[tem]);
- }
- }
- int main()
- {
- mms(parent,-1);
- cin>>a>>b;
- cin>>s;
- n=s.size();
- parent[0]=0;
- gradenje(0);
- // for(i,0,10){
- // cout<<i<<endl;
- // for(j,0,sosedstvo[i].size()){
- // cout<<sosedstvo[i][j]<<" ";
- // }
- // cout<<endl<<endl<<endl;
- // }
- queue<pair<int, int>> q;
- q.push(m_p(poc,0));
- bool visited[node];
- mms(visited,0);
- visited[poc]=1;
- while(!q.empty()){
- int teme=q.front().first;
- int dist=q.front().second;
- q.pop();
- //cout<<teme<<endl;
- if(teme==kra){
- cout<<dist;
- return 0;
- }
- for(i,0,sosedstvo[teme].size()){
- int novo=sosedstvo[teme][i];
- if(!visited[novo]){
- q.push(m_p(novo,dist+1));
- }
- }
- }
- //cout<<poc<<" "<<kra;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement