제출 #861650

#제출 시각아이디문제언어결과실행 시간메모리
861650faustaadp가장 긴 여행 (IOI23_longesttrip)C++17
40 / 100
896 ms5524 KiB
#include "longesttrip.h" #include<bits/stdc++.h> typedef long long ll; using namespace std; #define pb push_back const ll NN = 1e5 + 5; vector<int> ret, ret2; ll b[NN], n, ada = 0, mxx, now, coba = 0, ti; vector<ll> v[NN]; void dfs(ll pos) { if(ada)return ; b[pos] = 1; ret.pb(pos); // cout << pos << " mas " << ret.size() << "_\n"; // cout << ret.size() << " dan " << mxx << "\n"; coba++; if(ret2.size() < ret.size())ret2 = ret; if(coba >= n * 10 + 100)ada = 2; // if(ret.size() * 2 >= mxx)ada = 1; if(ada)return; // random_shuffle(v[pos].begin(), v[pos].end()); for(ll i = 0; i < v[pos].size(); i++) { if(b[v[pos][i]] == 0)dfs(v[pos][i]); if(ada)return ; } b[pos] = 0; // cout << pos << " kel\n"; ret.pop_back(); } void dfs2(ll pos) { now++; mxx = max(mxx, now); b[pos] = ti; for(ll i = 0; i < v[pos].size(); i++) if(b[v[pos][i]] == 0) dfs2(v[pos][i]); } std::vector<int> longest_trip(int N, int D) { ret2.clear(); mxx = 0; coba = 0; ada = 0; n = N; ret.clear(); for(ll i = 0; i < N; i++) { v[i].clear(); b[i] = 0; } for(ll i = 0; i < N; i++) for(ll j = i + 1; j < N; j++) { vector<int> A;A.pb(i); vector<int> B;B.pb(j); bool isi = are_connected(A, B); if(isi) { // cout << i << "--" << j << "\n"; v[i].pb(j); v[j].pb(i); } } for(ll i = 0; i < N; i++) if(!b[i]) { ti++; now = 0; dfs2(i); } for(ll i = 0; i < N; i++) { b[i] = 0; } ti = 1; vector<ll> cal; for(ll i = 0; i < N; i++) if(!b[i]) { ti++; now = 0; dfs2(i); if(now != mxx) continue; for(ll j = 0; j < N; j++) { if(b[j] == ti) cal.pb(j); } break; } memset(b, 0, sizeof(b)); for(ll i = 0; i < N; i++) { coba = 0; dfs(i); ret.clear(); if(ada == 2)ada = 0; if(ret.size() == mxx)break; } return ret2; // ll mul = 1; // if(N % 2 == 0) // { // vector<int> A;A.pb(0); // vector<int> B;B.pb(1); // bool isi = are_connected(A, B); // if(!isi) // swap(cal[1], cal[2]); // ret.pb(cal[0]); // ret.pb(cal[1]); // } // else // ret.pb(cal[0]); // for(ll i = mul; i + 1 < N; i += 2) // { // ll now = ret.back(); // vector<int> A;A.pb(now); // vector<int> B;A.pb(cal[i]); // bool isi = are_connected(A, B); // if() // } // return ret; }

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

longesttrip.cpp: In function 'void dfs(ll)':
longesttrip.cpp:23:21: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |     for(ll i = 0; i < v[pos].size(); i++)
      |                   ~~^~~~~~~~~~~~~~~
longesttrip.cpp: In function 'void dfs2(ll)':
longesttrip.cpp:37:21: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |     for(ll i = 0; i < v[pos].size(); i++)
      |                   ~~^~~~~~~~~~~~~~~
longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:102:23: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'll' {aka 'long long int'} [-Wsign-compare]
  102 |         if(ret.size() == mxx)break;
      |            ~~~~~~~~~~~^~~~~~
#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...