Submission #1061052

#TimeUsernameProblemLanguageResultExecution timeMemory
1061052ttamxReconstruction Project (JOI22_reconstruction)C++17
100 / 100
982 ms20660 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const int N=505; const int M=100005; int n,m,q; tuple<int,int,int> e[M]; int p[N],l[M],r[M]; vector<tuple<int,int,int>> a; int fp(int u){ return p[u]=(p[u]==u?u:fp(p[u])); } void uni(int u,int v){ u=fp(u),v=fp(v); p[u]=v; } int main(){ cin.tie(nullptr)->sync_with_stdio(false); cin >> n >> m; for(int i=0;i<m;i++){ auto &[w,u,v]=e[i]; cin >> u >> v >> w; } sort(e,e+m); for(int i=0;i<m;i++)r[i]=m; for(int i=0;i<m;i++){ iota(p+1,p+n+1,1); l[i]=i; auto [w,u,v]=e[i]; while(fp(u)!=fp(v)){ l[i]--; if(l[i]<0)break; auto [_,x,y]=e[l[i]]; uni(x,y); } if(l[i]>=0)r[l[i]]=i; } for(int i=0;i<m;i++){ int w=get<0>(e[i]); if(l[i]>=0){ int wl=get<0>(e[l[i]]); int wm=(wl+w+1)/2; a.emplace_back(wm,-1,w-wm); }else{ a.emplace_back(0,-1,w); } a.emplace_back(w,+2,0); if(r[i]<m){ int wr=get<0>(e[r[i]]); int wm=(w+wr+1)/2; a.emplace_back(wm,-1,w-wm); } } sort(a.rbegin(),a.rend()); ll sum=0,m=0,p=0; cin >> q; while(q--){ int x; cin >> x; while(!a.empty()&&get<0>(a.back())<=x){ auto [p2,m2,c]=a.back(); a.pop_back(); sum+=(p2-p)*m+c; m+=m2; p=p2; } cout << sum+(x-p)*m << "\n"; } }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...