제출 #1174508

#제출 시각아이디문제언어결과실행 시간메모리
1174508sleepntsheepPassport (JOI23_passport)C11
100 / 100
500 ms69468 KiB
#include<stdio.h> #include<stdlib.h> #include<string.h> #define N_ (3*N) #define N 900005 #define M_ 99999990 int xx,n,q,rt,ii,head[N_],vv[M_],ww[M_],nxt[M_],jj,dp1[N_],dp2[N_],tt[N_+N_],*dp,dp3[N_]; void pul(int i){ tt[i]=tt[i*2+(dp[tt[i*2+1]]<dp[tt[i*2]])]; } void fix(int i){ for(i+=ii;i/=2;)pul(i); } void lnk(int v,int u,int w) { int i=++jj; ww[i]=w; vv[i]=v; nxt[i]=head[u]; head[u]=i; } void lnk2(int v,int l,int r,int x,int y,int k) { if(r<x||y<l)return; if(x<=l&&r<=y){ lnk(k,v,0); return; } int m=(l+r)/2,vr=v+2*(m-l+1); lnk2(v+1,l,m,x,y,k); lnk2(vr,m+1,r,x,y,k); } void build(int v,int l,int r){ ii=v+1; if(l==r){ lnk(v,l,0); return; } int m=(l+r)/2,vr=v+2*(m-l+1); build(v+1,l,m); build(vr,m+1,r); lnk(v,vr,0); lnk(v,v+1,0); } void bfs(int src){ static int qu[N_+N_],hd,tl; hd=tl=N_; qu[tl]=src;++hd; while(hd-tl){ int u=qu[tl++]; for(int j=head[u];j;j=nxt[j]){ if(dp[vv[j]]>dp[u]+ww[j]){ dp[vv[j]]=dp[u]+ww[j]; if(ww[j]) qu[hd++]=vv[j]; else qu[--tl]=vv[j]; } } } } int main() { scanf("%d",&n); build(n,0,n-1); for(int ll,rr,i=0;i<n;++i){ scanf("%d%d",&ll,&rr); int br=ii++; lnk(i,br,1); lnk2(n,0,n-1,ll-1,rr-1,br); } dp=dp1; for(int i=0;i<ii;++i)dp[i]=i?1e9:0; bfs(0); dp=dp2; for(int i=0;i<ii;++i)dp[i]=i==n-1?0:1e9; bfs(n-1); dp=dp3; for(int i=0;i<ii;++i)dp[i]=dp1[i]+dp2[i],tt[ii+i]=i; dp[ii]=1e9+1; for(int i=ii;--i;)pul(i); for(int it=0;it<ii;++it){ int u=tt[1]; tt[ii+u]=ii; fix(u); for(int j=head[u];j;j=nxt[j]){ if(tt[vv[j]+ii]==vv[j]&&dp[u]+ww[j]<dp[vv[j]]){ dp[vv[j]]=dp[u]+ww[j]; fix(vv[j]); } } } scanf("%d",&q); while(q--)scanf("%d",&xx),--xx,printf("%d\n",dp3[xx]>=1e9?-1:dp3[xx]); }

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

passport.c: In function 'main':
passport.c:62:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   62 |     scanf("%d",&n);
      |     ^~~~~~~~~~~~~~
passport.c:66:9: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   66 |         scanf("%d%d",&ll,&rr);
      |         ^~~~~~~~~~~~~~~~~~~~~
passport.c:95:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   95 |     scanf("%d",&q);
      |     ^~~~~~~~~~~~~~
passport.c:96:15: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   96 |     while(q--)scanf("%d",&xx),--xx,printf("%d\n",dp3[xx]>=1e9?-1:dp3[xx]);
      |               ^~~~~~~~~~~~~~~
#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...