제출 #557141

#제출 시각아이디문제언어결과실행 시간메모리
557141OlympiaDreaming (IOI13_dreaming)C++17
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h> //#include "dreaming.h" using namespace std; vector<int> a, b, w; vector<vector<int> > adj; map<pair<int,int>,int64_t> myMap; vector<bool> hasVisited; vector<int> parent; pair<int,int> find_farthest_node (int x, bool undo) { queue<pair<int,int64_t> > q; q.push(make_pair(x, 0)); hasVisited[x] = true; parent[x] = -1; vector<int> nodes; vector<pair<int,int> > vec; while (!q.empty()) { pair<int,int64_t> p = q.front(); nodes.push_back(p.first); vec.push_back(make_pair(p.second, p.first)); q.pop(); for (int j: adj[p.first]) { if (!hasVisited[j]) { q.push(make_pair(j, p.second + myMap[make_pair(j, p.first)])); parent[j] = p.first; hasVisited[j] = true; } } } if (undo) { for (int j: nodes) { hasVisited[j] = false; } } sort(vec.begin(), vec.end()); reverse(vec.begin(), vec.end()); return vec[0]; //first distance, then node } int travelTime (int N, int M, int L, int A[], int B[], int W[]) { cin >> N >> M >> L; a.resize(M), b.resize(M), w.resize(M), adj.resize(N), parent.resize(N); int64_t s = 0; for (int i = 0; i < M; i++) { a[i] = A[i], b[i] = B[i], w[i] = W[i]; //cin >> a[i] >> b[i] >> w[i]; myMap[make_pair(a[i], b[i])] = w[i]; myMap[make_pair(b[i], a[i])] = w[i]; adj[a[i]].push_back(b[i]), adj[b[i]].push_back(a[i]); } hasVisited.assign(N, false); vector<int> paths; for (int i = 0; i < N; i++) { if (!hasVisited[i]) { //cout << i << '\n'; cout << "YES " << i << '\n'; int x = find_farthest_node(i, true).second; int y = find_farthest_node(x, true).second; //x and y are endpoints of the diameter vector<int> nodes; int val = y; while (val != -1) { nodes.push_back(val); val = parent[val]; } int64_t sum = 0; for (int j = 1; j < (int) nodes.size(); j++) { sum += myMap[make_pair(nodes[j], nodes[j - 1])]; } int64_t a = 0; int64_t myMin = LLONG_MAX; int best = 0; for (int j = 1; j < (int)nodes.size(); j++) { a += myMap[make_pair(nodes[j], nodes[j - 1])]; if (max(a, sum - a) < myMin) { myMin = max(a, sum - a); best = nodes[j]; } } if (nodes.size() == 1) { myMin = 0; } paths.push_back(find_farthest_node(best, false).first); } } sort(paths.begin(), paths.end()); //cout << paths.size() << '\n'; if (paths.size() == 1) { return paths[0]; } else if (paths.size() == 2) { return paths.back() + paths[paths.size() - 2] + L; } else { return paths.back() + paths[paths.size() - 2] + 2 * L; } } int main() { int N = 12; int M = 8; int L = 2; int A[M], B[M], T[M]; A[0] = 0, A[1] = 8, A[2] = 2, A[3] = 5, A[4] = 5, A[5] = 1, A[6] = 1, A[7] = 10; B[0] = 8, B[1] = 2, B[2] = 7, B[3] = 11, B[4] = 1, B[5] = 3, B[6] = 9, B[7] = 6; T[0] = 4, T[1] = 2, T[2] = 4, T[3] = 3, T[4] = 7, T[5] = 1, T[6] = 5, T[7] = 3; cout << travelTime(N, M, L, A, B, T); }

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

dreaming.cpp: In function 'int travelTime(int, int, int, int*, int*, int*)':
dreaming.cpp:42:13: warning: unused variable 's' [-Wunused-variable]
   42 |     int64_t s = 0;
      |             ^
/usr/bin/ld: /tmp/ccuqhz87.o: in function `main':
dreaming.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccfI5qY6.o:grader.c:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/ccfI5qY6.o: in function `main':
grader.c:(.text.startup+0xd1): undefined reference to `travelTime'
collect2: error: ld returned 1 exit status