제출 #1174472

#제출 시각아이디문제언어결과실행 시간메모리
1174472sleepntsheepPassport (JOI23_passport)C11
0 / 100
236 ms49468 KiB
#include<stdio.h> #include<stdlib.h> #include<string.h> #define N_ (3*N) #define N 200005 #define M_ 2999999 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,1); 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); ii=n; build(n+1,1,n); for(int ll,rr,i=1;i<=n;++i){ scanf("%d%d",&ll,&rr); lnk2(n+1,1,n,ll,rr,i); } dp=dp1; for(int i=1;i<ii;++i)dp[i]=i==1?0:1e9; bfs(1); dp=dp2; for(int i=1;i<ii;++i)dp[i]=i==n?0:1e9; bfs(n); dp=dp3; for(int i=1;i<ii;++i)dp[i]=dp1[i]+dp2[i],tt[ii+i]=i; for(int i=n+1;i<ii;++i)dp[i]=1e9; dp[0]=1e9+1; for(int i=ii;--i;)pul(i); for(int it=0;it<ii;++it){ int u=tt[1],c=dp[u]; tt[ii+u]=0; 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),printf("%d\n",dp3[xx]>=1e9?-1:dp3[xx]); }

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

passport.c: In function 'main':
passport.c:66:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   66 |     scanf("%d",&n);
      |     ^~~~~~~~~~~~~~
passport.c:71:9: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   71 |         scanf("%d%d",&ll,&rr);
      |         ^~~~~~~~~~~~~~~~~~~~~
passport.c:100:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
  100 |     scanf("%d",&q);
      |     ^~~~~~~~~~~~~~
passport.c:101:15: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
  101 |     while(q--)scanf("%d",&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...