제출 #202402

#제출 시각아이디문제언어결과실행 시간메모리
202402gs18115웜뱃 (IOI13_wombats)C++14
9 / 100
3047 ms14968 KiB
#include"wombats.h" #include<iostream> #include<vector> #include<queue> #include<algorithm> #define ep emplace #define eb emplace_back #define fi first #define se second #define all(x) (x).begin(),(x).end() #define semicolon ; #define ryan bear using namespace std; typedef long long ll; typedef pair<int,int>pi; typedef pair<ll,ll>pl; const int inf=1e9+7; const ll INF=1e18+7; struct node { int l,r; int d[200][200]; }tr[1500]; int r,c; int opt[200][200]; inline void merge(int n,int l,int r) { node&m=tr[n]; node&x=tr[l]; node&y=tr[r]; for(int i=0;i<c;i++) for(int j=0;j<c;j++) opt[i][j]=-1; for(int i=0;i<c;i++) { int j=0; for(int k=0;k<c;k++) { int&o=opt[i][j]=0; for(int k=0;++k<c;) if(x.d[i][k]+y.d[k][j]<x.d[i][o]+y.d[o][j]) o=k; } } for(int j=0;j<c;j++) { int i=c-1; for(int k=0;k<c;k++) { int&o=opt[i][j]=0; for(int k=0;++k<c;) if(x.d[i][k]+y.d[k][j]<x.d[i][o]+y.d[o][j]) o=k; } } for(int l=-c;++l<c;) { for(int i=0;i<c;i++) { int j=i+l; if(j<0||j>=c||opt[i][j]!=-1) continue; int&o=opt[i][j]=opt[i][j-1]; for(int k=o;++k<opt[i+1][j];) if(x.d[i][k]+y.d[k][j]<x.d[i][o]+y.d[o][j]) o=k; } } for(int i=0;i<c;i++) for(int j=0;j<c;j++) m.d[i][j]=x.d[i][opt[i][j]]+y.d[opt[i][j]][j]; return; } int dn; vector<pi>adj[100010]; int d[100010]; inline void dijk(int s) { fill(d,d+dn,inf); priority_queue<pi,vector<pi>,greater<pi> >pq; pq.ep(d[s]=0,s); while(!pq.empty()) { int x=pq.top().se; int cd=pq.top().fi; pq.pop(); if(d[x]!=cd) continue; for(pi&t:adj[x]) if(d[t.fi]>cd+t.se) pq.ep(d[t.fi]=cd+t.se,t.fi); } return; } vector<vector<int> >h,v; inline void init(int n,int s,int e) { node&x=tr[n]; dn=(e-s+1)*c; for(int i=0;i<dn;i++) adj[i].clear(); for(int i=s;i<=e;i++) { for(int j=0;j<c-1;j++) { int cn=i*c-s*c+j; adj[cn].eb(cn+1,h[i][j]); adj[cn+1].eb(cn,h[i][j]); } } for(int i=s;i<e;i++) { for(int j=0;j<c;j++) { int cn=i*c-s*c+j; adj[cn].eb(cn+c,v[i][j]); adj[cn+c].eb(cn,v[i][j]); } } for(int i=0;i<c;i++) { dijk(i); for(int j=0;j<c;j++) x.d[i][j]=d[j+(e-s)*c]; } return; } int tct=0,rt; int init(int s,int e) { int cur=tct++; node&x=tr[cur]; if(e-s<20) { x.l=x.r=0; init(cur,s,e); return cur; } int m=(s+e)/2; x.l=init(s,m); x.r=init(m,e); merge(cur,x.l,x.r); return cur; } void ch(int n,int s,int e,int r) { if(s>r||e<r) return; node&x=tr[n]; if(e-s<20) { init(n,s,e); return; } int m=(s+e)/2; ch(x.l,s,m,r); ch(x.r,m,e,r); merge(n,x.l,x.r); return; } void cv(int n,int s,int e,int r) { if(s>r||e<=r) return; node&x=tr[n]; if(e-s<20) { init(n,s,e); return; } int m=(s+e)/2; cv(x.l,s,m,r); cv(x.r,m,e,r); merge(n,x.l,x.r); return; } void init(int R,int C,int H[5000][200],int V[5000][200]) { r=R; c=C; h.resize(r); for(int i=0;i<r;i++) for(int j=0;j<c-1;j++) h[i].eb(H[i][j]); v.resize(r-1); for(int i=0;i<r-1;i++) for(int j=0;j<c;j++) v[i].eb(V[i][j]); rt=init(0,r-1); return; } void changeH(int P,int Q,int W) { h[P][Q]=W; ch(rt,0,r-1,P); return; } void changeV(int P,int Q,int W) { v[P][Q]=W; cv(rt,0,r-1,P); return; } int escape(int V1,int V2) { return tr[rt].d[V1][V2]; }

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

grader.c: In function 'int main()':
grader.c:15:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
  int res;
      ^~~
#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...