# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
981344 | Faisal_Saqib | Road Closures (APIO21_roads) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "roads.h"
#include <bits/stdc++.h>
#include "grader.cpp"
#include <vector>
using namespace std;
#define ll long long
vector<ll> subtask1(int n,vector<int>&u,vector<int>&v,vector<int>&w)
{
vector<ll> ans(n);
sort(begin(w),end(w));
ans[0]=0;
for(int i=0;i<(n-1);i++)
ans[0]+=w[i];
for(int i=1;i<n;i++)
ans[i]=ans[i-1]-w[n-i-1];
return ans;
}
vector<ll> subtask2(int n,vector<int>&u,vector<int>&v,vector<int>&w)
{
vector<long long> ans(n);
vector<ll> f(n+2);
f[0]=f[1]=0;
for(int i=2;i<(n);i++)
f[i]=min(((ll)w[i-1])+f[i-1],((ll)w[i-2])+f[i-2]);
for(int i=0;i<(n-1);i++)
ans[0]+=((ll)w[i]);
ans[1]=f[n-1];
return ans;
}
vector<long long> minimum_closure_costs(int n, std::vector<int> u,std::vector<int> v,std::vector<int> w) {
bool subtask11=1,subtask22=1;
for(int i=0;i<(n-1);i++)
{
subtask11&=(u[i]==0);
subtask22&=(u[i]==i and v[i]==(i+1));
}
if(subtask11)
{
return subtask1(n,u,v,w);
}
else if(subtask22)
{
return subtask2(n,u,v,w);
}
else{
return vector<ll>(n);
}
return vector<ll>(n);
}