Submission #223632

#TimeUsernameProblemLanguageResultExecution timeMemory
2236322fat2codeTraffickers (RMI18_traffickers)C++17
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define all(a) (a).begin(), (a).end() //#pragma GCC optimize("O3") //#pragma GCC optimize("Ofast") //#pragma GCC taraget("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") #define sz() size() #define fr first #define sc second #define pi pair<int,int> #define int long long #define pii pair<pair<int,int>,int> #define mp make_pair #define rc(s) return cout<<s,0 #define rcc(s) cout<<s,exit(0) using namespace std; const int mod=1e9+7; const int modp=1999999973; const int modulo=998244353; const int nmax=30005; int n,q,parinte[nmax],lca[nmax][23],aib[21][21][2*nmax],first[nmax],last[nmax],height[nmax]; vector<int>nod[nmax],euler; void DFS(int s,int par,int &timp){ euler.push_back(s); parinte[s]=par; tin[s]=(++timp); for(auto it:nod[s]){ if(it!=par){ DFS(it,s,timp); euler.push_back(s); } } tout[s]=(++timp); } int findLCA(int x, int y){ if(x==y) return x; if(tin[x]<tin[y] && tout[x]>tout[y]) return x; if(tin[y]<tin[x] && tout[y]>tout[x]) return y; while(true){ bool bl=false; for(int j=0;j<=21;j++){ int x1=lca[x][j]; int y1=lca[x][j+1]; if(tin[x1]>tin[y] || tout[x1]<tout[y]){ if(tin[y1]<tin[y] && tout[y1]>tout[y]){ x=x1; bl=true; break; } } } if(bl==false) break; } return lca[x][0]; } void update(int pos,int val,int aib[]){ while(pos<=euler.size()){ aib[pos]+=val; pos+=(pos&-pos); } } int sum(int pos,int aib[]){ int rs=0; while(pos){ rs+=aib[pos]; pos-=(pos&-pos); } return rs; } void query12(int x,int y,int type){ int lc=findLCA(x,y); vector<int>path; while(x!=lc){ path.push_back(x); x=parinte[x]; } vector<int>tz; while(y!=lc){ tz.push_back(y); y=parinte[y]; } tz.push_back(y); if(tz.size()) for(int i=tz.size()-1;i>=0;i--) path.push_back(tz[i]); for(int i=0;i<path.size();i++){ int nod = path[i]; if(type==1){ update(first[nod],1,aib[i][path.size()]); update(last[nod]+1,-1,aib[i][path.size()]); } else{ update(first[nod],-1,aib[i][path.size()]); update(last[nod]+1,1,aib[i][path.size()]); } } } int query3(int x,int y,int timp){ if(timp==-1) return 0LL; int lc=findLCA(x,y); int ans=0; for(int i=1;i<=20;i++){ int cmp=(timp+1)/i; bool bo=false; for(int j=0;j<i;j++){ if((timp+1)%i>j){ bo=true; cmp++; } ans+=cmp*(sum(first[x],aib[j][i])+sum(first[y],aib[j][i])-sum(first[lc],aib[j][i])-sum(first[parinte[lc]],aib[j][i])); if(bo==true){ bo=false; cmp--; } } } return ans; } int32_t main(){ ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0); srand(chrono::steady_clock::now().time_since_epoch().count()); // ifstream cin("input.in"); cin >> n; for(int i=1;i<n;i++){ int x,y; cin >> x >> y; nod[x].push_back(y); nod[y].push_back(x); } int timp=0; DFS(1,-1,timp); int pop=0; for(auto it:euler){ pop++; if(first[it]==0){ first[it]=pop; last[it]=pop; } else last[it]=pop; } for(int i=1;i<=n;i++) lca[i][0]=parinte[i]; for(int i=1;(1<<i)<=n;i++){ for(int j=1;j<=n;j++) lca[j][i]=lca[lca[j][i-1]][i-1]; } parinte[1]=0; cin >> q; for(int i=1;i<=q;i++){ int x,y; cin >> x >> y; query12(x,y,1); } cin >> q; int t=0; for(int i=1;i<=q;i++){ cin >> t; if(t==1 || t==2){ int x,y; cin >> x >> y; query12(x,y,t); } else{ int x,y,t1,t2; cin >> x >> y >> t1 >> t2; --t1; cout << query3(x,y,t2) - query3(x,y,t1) << '\n'; } } }

Compilation message (stderr)

traffickers.cpp: In function 'void DFS(long long int, long long int, long long int&)':
traffickers.cpp:32:5: error: 'tin' was not declared in this scope
     tin[s]=(++timp);
     ^~~
traffickers.cpp:32:5: note: suggested alternative: 'tan'
     tin[s]=(++timp);
     ^~~
     tan
traffickers.cpp:39:5: error: 'tout' was not declared in this scope
     tout[s]=(++timp);
     ^~~~
traffickers.cpp:39:5: note: suggested alternative: 'stdout'
     tout[s]=(++timp);
     ^~~~
     stdout
traffickers.cpp: In function 'long long int findLCA(long long int, long long int)':
traffickers.cpp:46:8: error: 'tin' was not declared in this scope
     if(tin[x]<tin[y] && tout[x]>tout[y]) return x;
        ^~~
traffickers.cpp:46:8: note: suggested alternative: 'tan'
     if(tin[x]<tin[y] && tout[x]>tout[y]) return x;
        ^~~
        tan
traffickers.cpp:46:25: error: 'tout' was not declared in this scope
     if(tin[x]<tin[y] && tout[x]>tout[y]) return x;
                         ^~~~
traffickers.cpp:46:25: note: suggested alternative: 'stdout'
     if(tin[x]<tin[y] && tout[x]>tout[y]) return x;
                         ^~~~
                         stdout
traffickers.cpp:47:8: error: 'tin' was not declared in this scope
     if(tin[y]<tin[x] && tout[y]>tout[x]) return y;
        ^~~
traffickers.cpp:47:8: note: suggested alternative: 'tan'
     if(tin[y]<tin[x] && tout[y]>tout[x]) return y;
        ^~~
        tan
traffickers.cpp:47:25: error: 'tout' was not declared in this scope
     if(tin[y]<tin[x] && tout[y]>tout[x]) return y;
                         ^~~~
traffickers.cpp:47:25: note: suggested alternative: 'stdout'
     if(tin[y]<tin[x] && tout[y]>tout[x]) return y;
                         ^~~~
                         stdout
traffickers.cpp:53:16: error: 'tin' was not declared in this scope
             if(tin[x1]>tin[y] || tout[x1]<tout[y]){
                ^~~
traffickers.cpp:53:16: note: suggested alternative: 'tan'
             if(tin[x1]>tin[y] || tout[x1]<tout[y]){
                ^~~
                tan
traffickers.cpp:53:34: error: 'tout' was not declared in this scope
             if(tin[x1]>tin[y] || tout[x1]<tout[y]){
                                  ^~~~
traffickers.cpp:53:34: note: suggested alternative: 'stdout'
             if(tin[x1]>tin[y] || tout[x1]<tout[y]){
                                  ^~~~
                                  stdout
traffickers.cpp: In function 'void update(long long int, long long int, long long int*)':
traffickers.cpp:67:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     while(pos<=euler.size()){
           ~~~^~~~~~~~~~~~~~
traffickers.cpp: In function 'void query12(long long int, long long int, long long int)':
traffickers.cpp:97:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i=0;i<path.size();i++){
                 ~^~~~~~~~~~~~