Submission #812565

#TimeUsernameProblemLanguageResultExecution timeMemory
812565andrei_boacaThousands Islands (IOI22_islands)C++17
10 / 100
56 ms53220 KiB
#include "islands.h" #include <variant> #include <vector> #include <algorithm> #include <assert.h> //#include <bits/stdc++.h> //#include "grader.cpp" using namespace std; struct date { int nod,a,b; }; vector<date> muchii[100005]; vector<int> c[1005][1005]; bool useedge[300005],usenod[300005]; int n,m; bool good=0; int who; vector<int> edges,v; vector<int> nodes,w; void dfs(int nod) { if(muchii[nod].size()>=3) { good=1; who=nod; } usenod[nod]=1; for(date i:muchii[nod]) if(!usenod[i.nod]) dfs(i.nod); } vector<int> sol; void build(int x,int y,int z) { assert(x>=0&&y>=0&&z>=0); int A=c[x][y][0]; int B=c[y][x][0]; int C=c[x][z][0]; int D=c[z][x][0]; vector<int> aux={A,B,C,D,B,A,D,C}; for(int i:aux) sol.push_back(i); } void go(int nod) { w.push_back(nod); usenod[nod]=1; if(nod==who) { if(nodes.empty()) { nodes=w; edges=v; } return; } for(date i:muchii[nod]) if(!usenod[i.nod]) { v.push_back(i.a); go(i.nod); v.pop_back(); } w.pop_back(); } std::variant<bool, std::vector<int>> find_journey(int N, int M, std::vector<int> U, std::vector<int> V) { n=N; m=M; for(int i=0;i<m;i++) { int a=U[i]; int b=V[i]; c[a][b].push_back(i); } if(n==2) { if(c[0][1].size()>=2&&c[1][0].size()>=1) { int A=c[1][0][0]; int B=c[0][1][0]; int C=c[0][1][1]; sol={B,A,C,B,A,C}; return sol; } return false; } for(int a=0;a<n;a++) for(int b=0;b<n;b++) if(a!=b) { for(int i=0;i<c[a][b].size()&&i<c[b][a].size();i++) { int x=c[a][b][i]; int y=c[b][a][i]; muchii[a].push_back({b,x,y}); } } if(muchii[0].size()>=2) { int x=0; int y=muchii[0][0].nod; int z=muchii[0][1].nod; build(x,y,z); return sol; } dfs(0); if(good) { for(int i=0;i<n;i++) usenod[i]=0; go(0); for(int i=0;i<n;i++) usenod[i]=0; for(int i:edges) sol.push_back(i); for(int i:nodes) usenod[i]=1; int x=who; int y=-1; int z=-1; for(date i:muchii[x]) if(!usenod[i.nod]) { if(y==-1) y=i.nod; else z=i.nod; } build(x,y,z); reverse(edges.begin(),edges.end()); for(int i:edges) sol.push_back(i); return sol; } return false; }

Compilation message (stderr)

islands.cpp: In function 'std::variant<bool, std::vector<int, std::allocator<int> > > find_journey(int, int, std::vector<int>, std::vector<int>)':
islands.cpp:95:30: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |                 for(int i=0;i<c[a][b].size()&&i<c[b][a].size();i++)
      |                             ~^~~~~~~~~~~~~~~
islands.cpp:95:48: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   95 |                 for(int i=0;i<c[a][b].size()&&i<c[b][a].size();i++)
      |                                               ~^~~~~~~~~~~~~~~
#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...