제출 #839006

#제출 시각아이디문제언어결과실행 시간메모리
839006CookieIslands (IOI08_islands)C++14
컴파일 에러
0 ms0 KiB
#include<bits/stdc++.h> using namespace std; ifstream fin("susss.txt"); ofstream fout("res.txt"); #define forr(i, a, b) for(int i = a; i < b; i++) #define pb push_back #define vt vector #define fi first #define se second #define ll long long #define pll pair<ll, ll> #define pii pair<int, int> #define sz(v) (int)v.size() const int mxn = 1e6, inf = 1e9, mod = 1e9 + 7, mxm = 1e5 + 5; int n; vt<int>adj[mxn + 1]; bool vis[mxn + 1], in[mxn + 1]; ll mxd[mxn + 1]; int cost[mxn + 1]; int to[mxn + 1]; ll mx, id; void dfs(int s, int pre, int root, ll dep){ mxd[root] = max(mxd[root], dep); for(int ii = 0; ii < sz(adj[s]); ii++){ int i = adj[s][ii]; ll w; if(i == to[s])w = cost[s]; else w = cost[i]; if(i != pre && !in[i])dfs(i, s, root, dep + w); } } void dfs2(int s, int pre, int root, ll dep){ if(dep > mx){ mx = dep; id = s; } for(int ii = 0; ii < sz(adj[s]); ii++){ int i = adj[s][ii]; ll w; if(i == to[s])w = cost[s]; else w = cost[i]; if(i != pre && (s == root || !in[s])){ dfs2(i, s, root, dep + w); } } } void get_comp(int s){ vis[s] = 1; comp.pb(s); for(int idd = 0; idd < sz(adj[s]); idd++){ int i = adj[s][idd]; if(!vis[i]){ get_comp(i); } } } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for(int i = 1; i <= n; i++){ int v, w; cin >> v >> w; to[i] = v; cost[i] = w; adj[i].pb(v); adj[v].pb(i); } ll ans = 0; for(int i = 1; i <= n; i++){ if(!vis[i]){ ll cand = 0; int a = to[i], b = to[to[i]]; while(a != b){ a = to[a]; b = to[to[b]]; } a = i; while(a != b){ a = to[a]; b = to[b]; } ll pp = 0; vt<int>cyc; cyc.pb(a); in[a] = 1; pp += cost[a]; a = to[a]; vt<ll>pref; pref.pb(0); while(a != b){ in[a] = 1; cyc.pb(a); pref.pb(pp); pp += cost[a]; a = to[a]; } for(int ii = 0; ii < sz(cyc); ii++){ int j = cyc[ii]; dfs(j, -1, j, 0); mx = id = -1; dfs2(j, -1, j, 0); dfs2(id, -1, j, 0); cand = max(cand, mx); } ll pmx = mxd[cyc[0]]; for(int j = 1; j < sz(cyc); j++){ cand = max(cand, pref[j] + mxd[cyc[j]] + pmx); pmx = max(pmx, -pref[j] + mxd[cyc[j]]); } pmx = mxd[cyc[0]]; for(int j = 1; j < sz(cyc); j++){ cand = max(cand, -pref[j] + mxd[cyc[j]] + pmx + pp); pmx = max(pmx, pref[j] + mxd[cyc[j]]); } ans += cand; } } cout << ans; }

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

islands.cpp: In function 'void get_comp(int)':
islands.cpp:48:17: error: 'comp' was not declared in this scope
   48 |     vis[s] = 1; comp.pb(s);
      |                 ^~~~