Submission #990629

#TimeUsernameProblemLanguageResultExecution timeMemory
990629alexddVinjete (COI22_vinjete)C++17
100 / 100
395 ms182680 KiB
#include<bits/stdc++.h> using namespace std; int n,m; vector<pair<int,pair<int,int>>> con[100005]; pair<int,int> combine(pair<int,int> x, pair<int,int> y) { if(x.first < y.first) return x; if(x.first > y.first) return y; return {x.first,x.second+y.second}; } struct node { pair<int,int> mnm; int lazy,tole,tori; }; node emp = {{0,0},0,0,0}; vector<node> aint; void baga(int nod, int val) { aint[nod].lazy+=val; aint[nod].mnm.first+=val; } void propagate(int nod) { if(!aint[nod].lazy) return; baga(aint[nod].tole,aint[nod].lazy); baga(aint[nod].tori,aint[nod].lazy); aint[nod].lazy=0; } void upd(int nod, int st, int dr, int le, int ri, int newv) { if(le>ri) return; if(le==st && dr==ri) { baga(nod,newv); return; } int mij=(st+dr)/2; if(aint[nod].tole==0) { aint[nod].tole = aint.size(); aint.push_back({{0,mij-st+1},0,0,0}); } if(aint[nod].tori==0) { aint[nod].tori = aint.size(); aint.push_back({{0,dr-mij},0,0,0}); } propagate(nod); upd(aint[nod].tole,st,mij,le,min(mij,ri),newv); upd(aint[nod].tori,mij+1,dr,max(mij+1,le),ri,newv); aint[nod].mnm = combine(aint[aint[nod].tole].mnm, aint[aint[nod].tori].mnm); } int rez[100005]; void dfs(int nod, int par, pair<int,int> r) { upd(0,1,m,r.first,r.second,1); if(aint[0].mnm.first==0) rez[nod] = m - aint[0].mnm.second; else rez[nod] = m; for(auto x:con[nod]) { if(x.first!=par) { dfs(x.first,nod,x.second); } } upd(0,1,m,r.first,r.second,-1); } signed main() { cin>>n>>m; int u,v,a,b; for(int i=1;i<n;i++) { cin>>u>>v>>a>>b; con[u].push_back({v,{a,b}}); con[v].push_back({u,{a,b}}); } aint.push_back({{0,m},0,0,0}); dfs(1,0,{1,0}); for(int i=2;i<=n;i++) cout<<rez[i]<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...