Submission #1186964

#TimeUsernameProblemLanguageResultExecution timeMemory
1186964asli_bgFireworks (APIO16_fireworks)C++20
7 / 100
4 ms836 KiB
#include <bits/stdc++.h> using namespace std; #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; #define int long long typedef pair<int,int> pii; typedef vector<int> vi; typedef vector<pii> vii; typedef vector<bool> vb; typedef deque<int> di; typedef deque<pii> dii; typedef tree<pii,null_type,less<pii>,rb_tree_tag, tree_order_statistics_node_update> oset; #define fi first #define se second #define pb push_back #define pf push_front #define mid (l+r)/2 #define all(x) x.begin(),x.end() #define FOR(i,a) for(int i=0;i<(a);i++) #define FORE(i,a,b) for(int i=(a);i<(b);i++) #define cont(x) for(auto el:x) cout<<el<<' ';cout<<endl; #define contp(x) for(auto el:x) cout<<el.fi<<'-'<<el.se<<' ';cout<<endl; #define sp <<" "<< #define DEBUG(x) cout<<(#x) sp x<<endl #define carp(a,b) (((a%MOD)*(b%MOD))%MOD) #define topla(a,b) (((a%MOD)+(b%MOD))%MOD) const int INF=1e18; const int MAXN=5e3+5; const int MOD=1e9+7; int n,m; bool mark[MAXN]; int dp[MAXN][MAXN]; //d[i][j] --> i. nodea mesafe jkenki min cost vii adj[MAXN]; void dfs(int nd,int ata){ for(auto [kom,cost]:adj[nd]){ if(kom==ata) continue; dfs(kom,nd); } if(mark[nd]){ //DEBUG(nd); dp[nd][0]=0; return; } FOR(j,301){ //bana olan mesafe j olsun for(auto [kom,cost]:adj[nd]){ if(kom==ata) continue; int mn=INF; FOR(k,301){ //komşuya mesafe k olsun if(dp[kom][k]==INF) continue; int ekle=abs(j-(k+cost)); mn=min(mn,dp[kom][k]+ekle); } //cout<<"here" sp mn sp nd sp kom sp j<<endl; if(mn==INF){ dp[nd][j]=INF; break; } else{ if(dp[nd][j]==INF) dp[nd][j]=0; dp[nd][j]+=mn; } } } } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); multiset<int> s; cin>>n>>m; FORE(i,1,n){ int a=i+1; int b,c; cin>>b>>c; adj[a].pb({b,c}); adj[b].pb({a,c}); s.insert(c); } FORE(i,1,m+1){ int a=n+i; int b,c; cin>>b>>c; adj[a].pb({b,c}); adj[b].pb({a,c}); mark[a]=true; s.insert(c); } if(n==1){ vi vec; for(auto el:s) vec.pb(el); int sz=vec.size(); int med=vec[sz/2]; int ans=0; for(auto el:vec){ ans+=abs(el-med); } cout<<ans<<endl; } else{ FORE(i,1,n+m+1){ FOR(j,301){ dp[i][j]=INF; } } dfs(1,-1); int ans=INF; FOR(j,301){ ans=min(ans,dp[1][j]); } cout<<ans<<endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...