제출 #154144

#제출 시각아이디문제언어결과실행 시간메모리
154144nicolaalexandraDreaming (IOI13_dreaming)C++14
컴파일 에러
0 ms0 KiB
#include <fstream> #include <vector> #include <algorithm> #include <cstring> #define DIM 100010 #define INF 2000000000 #include "dreaming.h" using namespace std; ifstream fin ("dreaming.in"); ofstream fout ("dreaming.out"); int nr,n,m,l,i; int dp_down[DIM]; /// cel mai lung drum in subarborele lui i int dp_up[DIM]; /// cel mai lung drum din i in afara subarborelui lui i int s[DIM],viz[DIM],v[DIM],a[DIM],b[DIM],cost[DIM]; vector <pair<int,int> > L[DIM]; vector <int> comp[DIM]; void dfs (int nod, int tata){ viz[nod] = 1; comp[nr].push_back(nod); for (int i=0;i<L[nod].size();i++){ int vecin = L[nod][i].first; if (vecin != tata){ dfs (vecin,nod); s[nod] = max (s[nod],s[vecin]+L[nod][i].second); }} int maxim = 0, maxim2 = 0; for (int i=0;i<L[nod].size();i++){ int vecin = L[nod][i].first, cost = L[nod][i].second; if (vecin == tata) continue; if (s[vecin]+cost > maxim){ maxim2 = maxim; maxim = s[vecin]+cost; } else { if (s[vecin]+cost > maxim2) maxim2 = s[vecin]+cost; }} dp_down[nod] = maxim+maxim2; } void dfs2 (int nod, int tata, int cost){ dp_up[nod] = max (dp_up[nod],dp_up[tata]+cost); int maxim = 0, maxim2 = 0, p = 0; for (int i=0;i<L[nod].size();i++){ int fiu = L[nod][i].first, cst = L[nod][i].second; if (fiu == tata) continue; if (s[fiu]+cst > maxim){ maxim2 = maxim; maxim = s[fiu]+cst, p = fiu; } else if (s[fiu]+cst > maxim2) maxim2 = s[fiu]+cst; } for (int i=0;i<L[nod].size();i++){ int fiu = L[nod][i].first; if (fiu == tata) continue; if (fiu == p) dp_up[fiu] = max (dp_up[fiu],maxim2+L[nod][i].second); else dp_up[fiu] = max (dp_up[fiu],maxim+L[nod][i].second); } for (int i=0;i<L[nod].size();i++){ int vecin = L[nod][i].first; if (vecin != tata) dfs2 (vecin,nod,L[nod][i].second); }} int timeTravel (int n, int m, int l, int a[], int b[], int cost[]){ for (int i=1;i<=n;i++) L[i].clear(); for (int i=0;i<m;i++){ int x = a[i], y = b[i], cst = cost[i]; x++, y++; L[x].push_back(make_pair(y,cst)); L[y].push_back(make_pair(x,cst)); } memset (viz,0,sizeof viz); memset (dp_up,0,sizeof dp_up); memset (dp_down,0,sizeof dp_down); memset (s,0,sizeof s); nr = 0; for (int i=1;i<=n;i++){ if (!viz[i]){ nr++; dfs (i,0); dfs2 (i,0,0); }} int sol = 0; for (int i=1;i<=nr;i++){ /// incerc sa aleg cel mai bun nod reprezentant pt componenta conexa i int mini = INF; for (auto nod:comp[i]){ /// distanta maxima in componenta i int dist_max = max (dp_up[nod]+s[nod],dp_down[nod]); sol = max (sol,dist_max); /// incerc sa l aleg pe nod reprezentant int dist = max (s[nod],dp_up[nod]); mini = min (mini,dist); } v[i] = mini; } sort (v+1,v+nr+1); if (nr >= 2) sol = max (sol,v[nr-1]+v[nr]+l); if (nr >= 3) sol = max (sol,v[nr-1]+v[nr-2]+2*l); return sol; }

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

dreaming.cpp: In function 'void dfs(int, int)':
dreaming.cpp:20:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=0;i<L[nod].size();i++){
                  ~^~~~~~~~~~~~~~
dreaming.cpp:27:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=0;i<L[nod].size();i++){
                  ~^~~~~~~~~~~~~~
dreaming.cpp: In function 'void dfs2(int, int, int)':
dreaming.cpp:44:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=0;i<L[nod].size();i++){
                  ~^~~~~~~~~~~~~~
dreaming.cpp:55:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=0;i<L[nod].size();i++){
                  ~^~~~~~~~~~~~~~
dreaming.cpp:64:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i=0;i<L[nod].size();i++){
                  ~^~~~~~~~~~~~~~
/tmp/ccdE2Zgb.o: In function `main':
grader.c:(.text.startup+0xa2): undefined reference to `travelTime'
collect2: error: ld returned 1 exit status