제출 #1154316

#제출 시각아이디문제언어결과실행 시간메모리
1154316sasdeDesignated Cities (JOI19_designated_cities)C++20
22 / 100
158 ms55888 KiB
#include<bits/stdc++.h> #define str string #define task "strdel" #define ii pair<int,int> #define iii pair<int,ii> #define iv pair<ii,ii> #define se second #define fi first #define ffi fi.fi #define sfi se.fi #define sse se.se #define fse fi.se #define lt(i, c, d) for(int i = c; i <= d; ++i) #define fl(i, c, d) for(int i = d; i >= c; --i) #define pb push_back #define emb emplace_back #define emf emplace_front #define em emplace using namespace std; const int N=1e6+5,lg=20,mod=1e9+7; mt19937 rd(chrono::steady_clock::now().time_since_epoch().count()); int Rand(int u,int v){ return u+rd()%(v-u+1); } int n,q; long long f[N],f1[N],w[N],sum,dp[N],up[N]; struct pt { int v,c,d; pt(){}; pt(int _v,int _c,int _d):v(_v),c(_c),d(_d){}; }; vector<pt>a[N]; vector<long long>res; long long dfs3(int u,int cha){ long long maxx=0; for(pt v:a[u]){ if(v.v==cha)continue; long long g=dfs3(v.v,u)+v.c; if(maxx==0)maxx=g; else { res.emb(min(g,maxx)); maxx=max(maxx,g); } } return maxx; } void dfs2(int u,int cha){ up[u]=cha; for(pt v:a[u]){ if(v.v==cha)continue; w[v.v]=w[u]+v.d+v.c; dfs2(v.v,u); } } void dfs1(int u,int cha){ f[u]=f1[u]; for(pt v:a[u]){ if(v.v==cha)continue; f1[u]-=f1[v.v]+v.d; f1[v.v]+=f1[u]+v.c; dfs1(v.v,u); f1[v.v]-=f1[u]+v.c; f1[u]+=f1[v.v]+v.d; } } void dfs(int u,int cha){ for(pt v:a[u]){ if(v.v==cha)continue; dfs(v.v,u); f1[u]+=f1[v.v]+v.d; } } bool k[N]; void solve(){ cin >> n ; for(int i=1;i<n;++i){ int u,v,c,d; cin >> u >> v >> d >> c; a[u].emb(v,d,c); a[v].emb(u,c,d); sum+=d+c; } dfs(1,-1); dfs1(1,-1); int l=1,r=1; dfs2(1,-1); for(int i=1;i<=n;++i){ dp[1]=max(dp[1],f[i]); if(f[i]+w[i]>f[l]+w[l])l=i; } w[l]=0; dfs2(l,-1); for(int i=1;i<=n;++i){ if(f[i]+w[i]>f[r]+w[r])r=i; } dp[2]=(f[l]+f[r]+w[r])/2; int u=r; while(u!=-1){ k[u]=true; u=up[u]; } u=r; while(u!=-1){ for(pt v:a[u]){ if(!k[v.v])res.emb(dfs3(v.v,u)+v.c); } u=up[u]; } sort(res.begin(),res.end(),greater<long long>()); int pos=2; for(int i:res){ ++pos; dp[pos]=dp[pos-1]+i; // cout <<pos<<" "<<i<<'\n'; } for(;pos<=n;++pos){ dp[pos]=sum; } cin >> q; // for(int i=1;i<=n;++i)cout <<f[i]<<" "; while(q--){ int e; cin >> e; cout<<sum-dp[e]<<'\n'; } } main() { srand(time(0)); ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); if(fopen(task".inp","r")){ freopen(task".inp","r",stdin); freopen(task".out","w",stdout); } int t=1; // cin >> t; while(t--){ solve(); cout<<'\n'; } }

컴파일 시 표준 에러 (stderr) 메시지

designated_cities.cpp:129:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  129 | main()
      | ^~~~
designated_cities.cpp: In function 'int main()':
designated_cities.cpp:136:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  136 |       freopen(task".inp","r",stdin);
      |       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
designated_cities.cpp:137:14: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  137 |       freopen(task".out","w",stdout);
      |       ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#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...