제출 #1231639

#제출 시각아이디문제언어결과실행 시간메모리
1231639nguyenkhangninh99Dreaming (IOI13_dreaming)C++20
컴파일 에러
0 ms0 KiB
#include "dreaming.h" #include <bits/stdc++.h> using namespace std; #define FOR(i, a, b) for(int i = a; i <= b; i++) inline bool maximize(int &u, int v){ return v > u ? u = v, true : false; } inline bool minimize(int &u, int v){ return v < u ? u = v, true : false; } const int maxN = 1e5 + 5; int n, m, l; vector<pair<int, int>> adj[maxN]; int cnt; bool visited[maxN]; int mx1[maxN], out[maxN], mx2[maxN]; int root[maxN], sz[maxN]; int maxBranch[maxN]; int find_root(int v){ return root[v] = root[v] == v ? v : find_root(root[v]); } bool union_set(int u, int v){ u = find_root(u); v = find_root(v); if(u == v) return false; if(sz[u] < sz[v])swap(u, v); sz[u] += sz[v]; root[v] = u; return true; } void dfs(int u){ visited[u] = true; // cout << u << "\n"; for(auto[v, w] : adj[u]){ if(visited[v])continue; dfs(v); if(mx1[v] + w > mx1[u]){ mx2[u] = mx1[u]; mx1[u] = mx1[v] + w; }else maximize(mx2[u], mx1[v] + w); } } void dfs2(int u){ visited[u] = true; for(auto[v, w] : adj[u]){ if(visited[v])continue; out[v] = out[u] + w; if(mx1[v] + w == mx1[u])maximize(out[v], mx2[u] + w); else maximize(out[v], mx1[u] + w); dfs2(v); } } int travelTime(int N, int M, int L, int A[], int B[], int T[]){ n = N; m = M; l = L; FOR(i, 0, n - 1)root[i] = i, sz[i] = 1; FOR(i, 0, m - 1){ int u = A[i]; int v = B[i]; int w = T[i]; adj[u].emplace_back(v, w); adj[v].emplace_back(u, w); union_set(u, v); } FOR(i, 0, n - 1){ if(!visited[i]){ dfs(i); } } FOR(i, 0, n - 1)visited[i] = false; FOR(i, 0, n - 1){ if(!visited[i]){ dfs2(i); } } int ans = 0; FOR(i, 0, n - 1){ maximize(ans, max(mx1[i] + mx2[i], mx1[i] + out[i])); } vector<int> res; FOR(i, 0, n - 1)maxBranch[i] = inf; FOR(i, 0, n - 1)minimize(maxBranch[find_root(i)], max(mx1[i], out[i])); FOR(i, 0, n - 1)if(i == find_root(i))res.emplace_back(maxBranch[i]); sort(res.begin(), res.end()); reverse(res.begin(), res.end()); if(res.size() == 1){ return ans; }else if(res.size() == 2){ return max(ans, res[0] + res[1] + l); }else{ ans = max(ans, res[0] + res[1] + l); ans = max(ans, res[1] + res[2] + 2 * l); return ans; } }

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

dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:86:36: error: 'inf' was not declared in this scope; did you mean 'ynf'?
   86 |     FOR(i, 0, n - 1)maxBranch[i] = inf;
      |                                    ^~~
      |                                    ynf