제출 #106332

#제출 시각아이디문제언어결과실행 시간메모리
106332ly20꿈 (IOI13_dreaming)C++14
14 / 100
117 ms19832 KiB
#include<bits/stdc++.h> #include "dreaming.h" using namespace std; #define debug(args...) //fprintf(stderr,args) const int MAXN=112345,INF=1123456789; vector<int> grafo[MAXN],peso[MAXN]; vector<int> rs; int maxdist,id,dist[MAXN][2],marc[MAXN][2],rmin,pai[MAXN],pspai[MAXN]; int md; void dfs1(int v) { debug("passando por %d\n",v); marc[v][0]=1; if(dist[v][0]>maxdist) { maxdist=dist[v][0]; id=v; } for(int i=0;i<grafo[v].size();i++) { int viz=grafo[v][i],p=peso[v][i]; if(marc[viz][0]==1)continue; dist[viz][0]=dist[v][0]+p; dfs1(viz); } } void dfs2(int v) { marc[v][1]=1; if(dist[v][1]>maxdist) { maxdist=dist[v][1]; id=v; } for(int i=0;i<grafo[v].size();i++) { int viz=grafo[v][i],p=peso[v][i]; if(marc[viz][1]==1)continue; pai[viz]=v; pspai[viz]=p; dist[viz][1]=dist[v][1]+p; dfs2(viz); } } int travelTime(int N,int M,int L,int A[],int B[],int T[]) { int n=N,m=M,l=L,a[m],b[m],t[m]; for(int i=0;i<m;i++) { a[i]=A[i];b[i]=B[i];t[i]=T[i]; } for(int i=0;i<m;i++) { grafo[a[i]].push_back(b[i]);grafo[b[i]].push_back(a[i]); peso[a[i]].push_back(t[i]);peso[b[i]].push_back(t[i]); } md=0;maxdist=0;id=0; int resp=0; for(int i=0;i<n;i++) { if(marc[i][0]==0) { maxdist=0; dfs1(i); maxdist=0; pai[id]=id; pspai[id]=0; dfs2(id); md=max(md,maxdist); int dm=maxdist,dm1=maxdist; maxdist=INF; debug("mdist=%d\n",dm); while(pai[id]!=id) { debug("mdist=%d\n",maxdist); int k=max(dm1,dm-dm1); maxdist=min(maxdist,k); debug("no %d mdist %d pai do no e %d\n",id,maxdist,pai[id]); dm1-=pspai[id]; id=pai[id]; } debug("raio do no %d e %d\n",i,maxdist); rs.push_back(maxdist); } } sort(rs.begin(),rs.end()); int tm=rs.size(); resp=0; resp=max(resp,md); for(int i=0;i<tm;i++) { debug("raio[%d]=%d\n",i,rs[i]); } if(tm>=2)resp=max(resp,rs[tm-1]+rs[tm-2]+l); if(tm>=3)resp=max(resp,rs[tm-2]+rs[tm-3]+2*l); return resp; } /*int n,m,l,a[MAXN],b[MAXN],t[MAXN]; int main() { scanf("%d %d %d",&n,&m,&l); for(int i=0;i<m;i++)scanf("%d %d %d",&a[i],&b[i],&t[i]); printf("%d\n",travelTime(n,m,l,a,b,t)); return 0; }*/

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

dreaming.cpp: In function 'void dfs1(int)':
dreaming.cpp:20:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<grafo[v].size();i++)
              ~^~~~~~~~~~~~~~~~
dreaming.cpp: In function 'void dfs2(int)':
dreaming.cpp:36:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<grafo[v].size();i++)
              ~^~~~~~~~~~~~~~~~
#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...