Submission #571335

#TimeUsernameProblemLanguageResultExecution timeMemory
571335beaconmcDreaming (IOI13_dreaming)C++14
40 / 100
1047 ms14784 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3") typedef long long ll; #define FOR(i,x,y) for(ll i=x; i<y; i++) #define FORNEG(i,x,y) for(ll i=x; i>y; i--) #define double long double #include "dreaming.h" using namespace std; ll cc[100005]; ll find(ll a){ while (a!=cc[a]) cc[a] = cc[cc[a]], a = cc[a]; return a; } void unite(ll a,ll b){ cc[find(a)] = find(b); } ll globalmax = 0; vector<pair<ll, ll>> edges[100005]; vector<ll> sussies[100005]; int sus(vector<ll> a){ if (a.size()==1) return 0; bool visited[100005]; FOR(i,0,100004) visited[i] = 0; vector<vector<ll>> stack; ll maxi = 0; vector<ll> path; stack.push_back({0,a[0]}); visited[a[0]] = 1; while (stack.size()){ vector<ll> temp; vector<ll> node = stack[stack.size()-1]; stack.pop_back(); if (maxi < node[0]) path = node, maxi = node[0]; for (auto&i : edges[node[node.size()-1]]){ if (!visited[i.first]){ visited[i.first] = 1; temp = node; temp[0] += i.second; temp.push_back(i.first); stack.push_back(temp); } } } ll realsus = path[path.size()-1]; FOR(i,0,100004) visited[i] = 0; stack.clear(); maxi = 0; path.clear(); stack.push_back({0,0,realsus}); visited[realsus] = 1; while (stack.size()){ vector<ll> temp; vector<ll> node = stack[stack.size()-1]; stack.pop_back(); if (maxi < node[0]) path = node, maxi = node[0]; for (auto&i : edges[node[node.size()-1]]){ if (!visited[i.first]){ visited[i.first] = 1; temp = node; temp.pop_back(); temp[0] += i.second; temp.push_back(i.second); temp.push_back(i.first); stack.push_back(temp); } } } ll mini = 1000000000000; ll cur = 0; globalmax = max(globalmax, path[0]); FOR(i,1,path.size()-1){ cur += path[i]; mini = min(mini, max(path[0]-cur, cur)); } return mini; } int travelTime(int n, int m, int L, int a[], int b[], int t[]){ FOR(i,0,n) cc[i] = i; FOR(i,0,m){ edges[a[i]].push_back({b[i], t[i]}); edges[b[i]].push_back({a[i], t[i]}); } FOR(i,0,n){ for (auto&j : edges[i]){ unite(i, j.first); } } FOR(i,0,n){ sussies[find(i)].push_back(i); } vector<ll> kindasus; for (auto&i : sussies){ if (i.size()==0) continue; kindasus.push_back(sus(i)); } sort(kindasus.begin(), kindasus.end()); // for (auto&i : kindasus){ // cout << i << endl; // } if (kindasus.size() == 1) return globalmax; if (kindasus.size()==2){ return max(globalmax, kindasus[kindasus.size()-1] + kindasus[kindasus.size()-2] + L); } return max(globalmax, max(kindasus[kindasus.size()-2] + kindasus[kindasus.size()-3] + 2*L, kindasus[kindasus.size()-1] + kindasus[kindasus.size()-2] + L)); }

Compilation message (stderr)

dreaming.cpp: In function 'int sus(std::vector<long long int>)':
dreaming.cpp:4:33: 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]
    4 | #define FOR(i,x,y) for(ll i=x; i<y; i++)
......
  106 |  FOR(i,1,path.size()-1){
      |      ~~~~~~~~~~~~~~~~~           
dreaming.cpp:106:2: note: in expansion of macro 'FOR'
  106 |  FOR(i,1,path.size()-1){
      |  ^~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...