제출 #26776

#제출 시각아이디문제언어결과실행 시간메모리
26776repeating경주 (Race) (IOI11_race)C++11
0 / 100
6 ms5880 KiB
#include <bits/stdc++.h> #include "race.h" #define F first #define S second #define P push #define pb push_back #define MEM(dp,i) memset(dp,i,sizeof(dp)) #define W while #define R return #define C continue #define SI size() #define ll long long #define ld long double #define pll pair<ll,ll> #define pii pair<int,int> #define SF(x) scanf("%I64d",&x) #define SF2(x,y) scanf("%I64d%I64d",&x,&y) #define SF3(x,y,z) scanf("%I64d%I64d%I64d",&x,&y,&z) #define SF4(x,y,z,o) scanf("%I64d%I64d%I64d%I64d",&x,&y,&z,&o) #define all(v) v.begin(),v.end() using namespace std; const long long INF = 1e9+5e8; int n,k; vector<pii> adj[200105]; vector<int> v,vec; bool blocked[200105]; int sub[200105]; int par[200105]; int t[200105]; pii dis[200105]; int DFS(int ver){ v.pb(ver); int &ret=sub[ver]; ret=1; for(auto i : adj[ver]){ if(i.F==par[ver]||blocked[i.F])C; par[i.F]=ver; ret+=DFS(i.F); } R ret; } int dfs(int ver,int per,int d,int w){ if(d>1e6)R -1; int ret=-1; if(k>d&&t[k-d]!=-1){ if(ret==-1||ret>t[k-d]+w) ret=t[k-d]+w; } vec.pb(ver); dis[ver]={d,w}; for(auto i : adj[ver]){ if(i.F==per||blocked[i.F])C; int x=dfs(i.F,ver,d+i.S,w+1); if(x!=-1&&(ret==-1||ret>x)){ ret=x; } } R ret; } int creat(int ver){ v.clear(); par[ver]=-1; DFS(ver); int pos,mn=INF; for(auto i : v){ int mx=v.SI-sub[i]; for(int j=0;j<adj[i].SI;j++){ int node=adj[i][j].F; if(blocked[node]||node==par[i])C; mx=max(mx,sub[node]); } if(mn>mx){ mn=mx; pos=i; } } int ret=-1; blocked[pos]=1; for(auto i : v){ sub[i]=0; } // cout<<pos<<endl; t[0]=0; for(auto i : adj[pos]){ if(blocked[i.F])C; int x=dfs(i.F,-1,i.S,1); if(x!=-1&&(ret==-1||ret>x)) ret=x; for(int j=0;j<vec.SI;j++){ int x=vec[j]; if(t[dis[x].F]==-1||t[dis[x].F]>dis[x].S) t[dis[x].F]=dis[x].S; dis[x]={-1,-1}; } vec.clear(); } for(auto i : v) t[i]=par[i]=-1; for(auto i : adj[pos]){ if(blocked[i.F])C; int x=creat(i.F); if(x!=-1&&(ret==-1||ret>x)) ret=x; } R ret; } int best_path(int NN, int KK, int H[][2], int L[]) { MEM(t,-1); n=NN; k=KK; for(int i=0;i<n-1;i++){ adj[H[i][0]].pb({H[i][1],L[i]}); adj[H[i][1]].pb({H[i][0],L[i]}); } int ret=creat(0); return ret; }

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

race.cpp: In function 'int creat(int)':
race.cpp:68:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j=0;j<adj[i].SI;j++){
                      ^
race.cpp:91:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j=0;j<vec.SI;j++){
                      ^
race.cpp:79:17: warning: 'pos' may be used uninitialized in this function [-Wmaybe-uninitialized]
     blocked[pos]=1;
     ~~~~~~~~~~~~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...