Submission #979281

#TimeUsernameProblemLanguageResultExecution timeMemory
9792818pete8Road Closures (APIO21_roads)C++17
5 / 100
42 ms8244 KiB
#include "roads.h" #include<iostream> #include<stack> #include<map> #include<vector> #include<string> #include<unordered_map> #include <queue> #include<cstring> #include<limits.h> #include <cassert> #include<cmath> #include<set> #include<algorithm> #include <iomanip> #include<numeric> //gcd(a,b) #include<bitset> #include <cstdlib> #include <cstdint> using namespace std; #define ll long long #define f first //#define endl "\n" #define s second #define pii pair<int,int> #define ppii pair<int,pii> #define vi vector<int> #define pb push_back #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define F(n) for(int i=0;i<n;i++) #define lb lower_bound #define ub upper_bound #define fastio ios::sync_with_stdio(false);cin.tie(NULL); #pragma GCC optimize ("03,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") using namespace std; //#define int long long #define double long double /* ***** check if function has a return value? ***** */ const int mxn=1e5,inf=1e9,minf=-1e9,Mxn=1e7; ll dp[mxn+10][2]; vector<pii>adj[mxn+10]; int k; void solve(int cur,int p){ ll sum=0; vector<ll>v; for(auto i:adj[cur]){ if(i.f==p)continue; solve(i.f,cur); sum+=dp[i.f][1]+i.s; v.pb(dp[i.f][0]-dp[i.f][1]-i.s);//del all } dp[cur][0]=sum; sort(all(v));//free sum int cc=0; while(cc<v.size()&&cc<k-1&&v[cc]<0)dp[cur][0]+=v[cc],cc++; dp[cur][1]=dp[cur][0]; if(k&&cc<v.size()&&v[cc]<0)dp[cur][1]+=v[cc]; //cout<<cur<<" "<<dp[cur][0]<<" "<<dp[cur][1]<<"LL\n"; } int pa[mxn+10]; int find(int u){return (pa[u]==u)?u:pa[u]=find(pa[u]);} vector<ll> minimum_closure_costs(int N,vector<int>U,vector<int>V,vector<int>W) { bool sub1=1,sub2=1; vector<ll>ans; for(auto i:U)sub1&=(i==0); for(int i=0;i<N-1;i++)sub2&=(U[i]==i&&V[i]==i+1),pa[i]=i; if(sub1){ ll sum=0; sort(all(W)); for(auto i:W)sum+=i; ans.pb(sum); for(int i=0;i<N-1;i++)sum-=W.back(),W.pop_back(),ans.pb(sum); return ans; } else if(sub2){ for(int i=0;i<min(N,2);i++)k=i,solve(0,-1),ans.pb(dp[0][1]); while(ans.size()<N)ans.pb(0); return ans; } else if(N<2000){ for(int i=0;i<N-1;i++){ adj[U[i]].pb({V[i],W[i]}); adj[V[i]].pb({U[i],W[i]}); } for(int i=0;i<N;i++){ k=i,solve(0,-1); ans.pb(dp[0][1]); } return ans; }//sub5 dsu?? return ans; }/* int32_t main(){ int n;cin>>n; vector<int>u(n-1),v(n-1),w(n-1); for(int i=0;i<n-1;i++)cin>>u[i]>>v[i]>>w[i]; vector<ll>ans=minimum_closure_costs(n,u,v,w); for(auto i:ans)cout<<i<<" "; cout<<'\n'; }*/ /* n^2 solution = do dp dp[0],dp[1]; 0= didnt take par road,1= take par road we can have atmost k dp[0]; we can sort dp[1]+road-dp[0] cost of all children then greedy take */

Compilation message (stderr)

roads.cpp: In function 'void solve(int, int)':
roads.cpp:61:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   61 |   while(cc<v.size()&&cc<k-1&&v[cc]<0)dp[cur][0]+=v[cc],cc++;
      |         ~~^~~~~~~~~
roads.cpp:63:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |   if(k&&cc<v.size()&&v[cc]<0)dp[cur][1]+=v[cc];
      |         ~~^~~~~~~~~
roads.cpp: In function 'std::vector<long long int> minimum_closure_costs(int, std::vector<int>, std::vector<int>, std::vector<int>)':
roads.cpp:83:21: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   83 |     while(ans.size()<N)ans.pb(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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...