Submission #846575

#TimeUsernameProblemLanguageResultExecution timeMemory
846575math_rabbit_1028Longest Trip (IOI23_longesttrip)C++17
15 / 100
823 ms1828 KiB
#include <bits/stdc++.h> #include "longesttrip.h" using namespace std; vector<int> longest_trip(int N, int D) { int n = N; vector<int> adj[256]; vector<int> res; res.clear(); for (int i = 0; i < n; i++) adj[i].clear(); for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (are_connected({i}, {j})) { adj[i].push_back(j); adj[j].push_back(i); } } } int ch[256]; for (int i = 0; i < n; i++) ch[i] = 0; vector<int> path, clique; path.push_back(0); ch[0] = 1; while (true) { int bef = path.size(); for (int i = 0; i < adj[path.back()].size(); i++) { int v = adj[path.back()][i]; if (ch[v] == 0) { ch[v] = 1; path.push_back(v); break; } } if (bef == path.size()) break; } for (int i = 0; i < n; i++) if (ch[i] == 0) clique.push_back(i); bool connected = false; for (int i = 0; i < path.size(); i++) { for (int j = 0; j < adj[path[i]].size(); j++) { if (ch[adj[path[i]][j]] == 0) connected = true; } } if (connected) { for (int i = 0; i < adj[path[0]].size(); i++) { if (ch[adj[path[0]][i]] == 0) { int target = adj[path[0]][i]; res = path; reverse(res.begin(), res.end()); int t = 0; for (t = 0; t < clique.size(); t++) if (clique[t] == target) break; for (int j = 0; j < clique.size(); j++) res.push_back(clique[j]); return res; } } int s = path.size() - 1; for (int i = 0; i < adj[path[s]].size(); i++) { if (ch[adj[path[s]][i]] == 0) { int target = adj[path[s]][i]; res = path; int t = 0; for (t = 0; t < clique.size(); t++) if (clique[t] == target) break; swap(clique[0], clique[t]); for (int j = 0; j < clique.size(); j++) res.push_back(clique[j]); return res; } } for (int i = 0; i < clique.size(); i++) { for (int j = 0; j < adj[clique[i]].size(); j++) { if (ch[adj[clique[i]][j]] == 1) { int target = adj[clique[i]][j]; swap(clique[i], clique.back()); res = clique; while (path[0] != target) { int front = path[0]; path.erase(path.begin()); path.push_back(front); } for (int k = 0; k < path.size(); k++) res.push_back(path[k]); return res; } } } } else { if (path.size() > clique.size()) return path; return clique; } return {}; // never reached }

Compilation message (stderr)

longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:26:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |         for (int i = 0; i < adj[path.back()].size(); i++) {
      |                         ~~^~~~~~~~~~~~~~~~~~~~~~~~~
longesttrip.cpp:34:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   34 |         if (bef == path.size()) break;
      |             ~~~~^~~~~~~~~~~~~~
longesttrip.cpp:39:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |     for (int i = 0; i < path.size(); i++) {
      |                     ~~^~~~~~~~~~~~~
longesttrip.cpp:40:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |         for (int j = 0; j < adj[path[i]].size(); j++) {
      |                         ~~^~~~~~~~~~~~~~~~~~~~~
longesttrip.cpp:45:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   45 |         for (int i = 0; i < adj[path[0]].size(); i++) {
      |                         ~~^~~~~~~~~~~~~~~~~~~~~
longesttrip.cpp:51:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   51 |                 for (t = 0; t < clique.size(); t++) if (clique[t] == target) break;
      |                             ~~^~~~~~~~~~~~~~~
longesttrip.cpp:52:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |                 for (int j = 0; j < clique.size(); j++) res.push_back(clique[j]);
      |                                 ~~^~~~~~~~~~~~~~~
longesttrip.cpp:57:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   57 |         for (int i = 0; i < adj[path[s]].size(); i++) {
      |                         ~~^~~~~~~~~~~~~~~~~~~~~
longesttrip.cpp:62:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |                 for (t = 0; t < clique.size(); t++) if (clique[t] == target) break;
      |                             ~~^~~~~~~~~~~~~~~
longesttrip.cpp:64:35: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   64 |                 for (int j = 0; j < clique.size(); j++) res.push_back(clique[j]);
      |                                 ~~^~~~~~~~~~~~~~~
longesttrip.cpp:68:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |         for (int i = 0; i < clique.size(); i++) {
      |                         ~~^~~~~~~~~~~~~~~
longesttrip.cpp:69:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   69 |             for (int j = 0; j < adj[clique[i]].size(); j++) {
      |                             ~~^~~~~~~~~~~~~~~~~~~~~~~
longesttrip.cpp:79:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |                     for (int k = 0; k < path.size(); k++) res.push_back(path[k]);
      |                                     ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...