제출 #1227275

#제출 시각아이디문제언어결과실행 시간메모리
1227275MarwenElarbiConstruction of Highway (JOI18_construction)C++20
16 / 100
2095 ms6204 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> using namespace std; using namespace __gnu_pbds; template <class T> using Tree = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>; #define fi first #define se second const int nax=2e5+7; vector<int> adj[nax]; int colors[nax]; int parent[nax]; int main() { int n; cin>>n; for (int i = 0; i < n; ++i) { parent[i]=i; cin>>colors[i]; } for (int i = 0; i < n-1; ++i) { int x,y; cin>>x>>y; x--;y--; //cout <<x<<" "<<y<<endl; int j=x; Tree <int> st; int ans=0; //cout << parent[j]<<" "<<j<<endl; while(parent[j]!=j){ //cout<<j<<endl; ans+= st.order_of_key(colors[j]); st.insert(colors[j]); j=parent[j]; } ans+= st.order_of_key(colors[j]); st.insert(colors[j]); /*for(auto u:st) cout <<u<<" "; cout <<endl;*/ j=x; while(parent[j]!=j){ colors[j]=colors[y]; j=parent[j]; } //cout <<parej]<<" "<<colors[y]<<endl; colors[j]=colors[y]; parent[y]=x; /*cout <<"result:"<< ans <<endl; for (int j = 0; j < n; ++j) cout << colors[j]<<" "; cout <<endl;*/ cout <<ans<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...