Submission #198926

#TimeUsernameProblemLanguageResultExecution timeMemory
198926L01Split the Attractions (IOI19_split)C++17
18 / 100
155 ms10744 KiB
#include "split.h" #include<bits/stdc++.h> using namespace std; int extremo1,extremo2,numvis; vector<int>vis,siguiente[100005]; queue<int>cola; int encuentraextremo(int origen,int color) { int distancia[100005],ultimo; numvis=color; cola.push(origen); distancia[origen]=0; vis[origen]=numvis; while(!cola.empty()) { int actual=cola.front(); cola.pop(); for(int i=0;i<siguiente[actual].size();i++) { int nuevo=siguiente[actual][i]; if(vis[nuevo]!=numvis) { vis[nuevo]=numvis; distancia[nuevo]=distancia[actual]+1; cola.push(nuevo); } } ultimo=actual; } return ultimo; } int visita(int telementos,int origen,int grupo) { int tvisitados=0; numvis=grupo; cola.push(origen); while((!cola.empty()) and tvisitados<telementos) { int actual=cola.front(); cola.pop(); if(vis[actual]>3) { vis[actual]=numvis; tvisitados++; for(int i=0;i<siguiente[actual].size();i++) { int nuevo=siguiente[actual][i]; if(vis[nuevo]!=numvis) cola.push(nuevo); } } } while(!cola.empty()) cola.pop(); return tvisitados; } void rellena(int grupo,int tnumeros) { for(int i=0;i<tnumeros;i++) { if(vis[i]>3) vis[i]=grupo; } } vector<int> find_split(int tnodos,int telementos1,int telementos2,int telementos3,vector<int> origen,vector<int> destino) { for(int i=0;i<origen.size();i++) { siguiente[origen[i]].push_back(destino[i]); siguiente[destino[i]].push_back(origen[i]); } vis.resize(tnodos); extremo1=encuentraextremo(0,5); extremo2=encuentraextremo(extremo1,4); if(telementos1<=telementos3 and telementos2<=telementos3) { visita(telementos1,extremo1,1); if(telementos2==visita(telementos2,extremo2,2)) { rellena(3,tnodos); } else { vis.resize(0); vis.resize(tnodos); } } else { if(telementos1<=telementos2 and telementos3<=telementos2) { visita(telementos1,extremo1,1); if(telementos3==visita(telementos3,extremo2,3)) { rellena(2,tnodos); } else { vis.resize(0); vis.resize(tnodos); } } else { visita(telementos2,extremo1,2); if(telementos3==visita(telementos3,extremo2,3)) { rellena(1,tnodos); } else { vis.resize(0); vis.resize(tnodos); } } } return vis; }

Compilation message (stderr)

split.cpp: In function 'int encuentraextremo(int, int)':
split.cpp:18:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i=0;i<siguiente[actual].size();i++)
                     ~^~~~~~~~~~~~~~~~~~~~~~~~~
split.cpp: In function 'int visita(int, int, int)':
split.cpp:45:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             for(int i=0;i<siguiente[actual].size();i++)
                         ~^~~~~~~~~~~~~~~~~~~~~~~~~
split.cpp: In function 'std::vector<int> find_split(int, int, int, int, std::vector<int>, std::vector<int>)':
split.cpp:67:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<origen.size();i++)
              ~^~~~~~~~~~~~~~
split.cpp: In function 'int encuentraextremo(int, int)':
split.cpp:30:12: warning: 'ultimo' may be used uninitialized in this function [-Wmaybe-uninitialized]
     return ultimo;
            ^~~~~~
#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...