#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int> > adjList[200010];
int lonecnt[200010];
int ans[200010];
int lonecolour[] = {0, 1, 1, 0, 0, 1};
void dfs(int x, int dist, int parent = -1){ //ret val is lone seg count
for(auto it: adjList[x]){
if(it.first == parent) continue;
if((x==0 && (int)adjList[x].size()==1)||(x!=0&&(int)adjList[x].size()==2)){
if(lonecnt[x] != 0){
lonecnt[it.first] = lonecnt[x]+1;
}
else{
if(dist % 2 == 0){
lonecnt[it.first] = 1;
}
else{
lonecnt[it.first] = 0;
}
}
}
dfs(it.first, dist+1, x);
}
}
//weve got the lonecnt time to colour some stuff
void colouring(int x, int prev, int parent = -1){
for(auto it: adjList[x]){
if(it.first == parent) continue;
//start to colour from 0
if(lonecnt[it.first] == 0){
ans[it.second] = (prev+1)%2;
}
else{
ans[it.second] = lonecolour[(lonecnt[it.first]-1)%6];
}
colouring(it.first, ans[it.second], x);
}
}
vector::Mark(int N, int M, int A, int B, vector<int> U, vector<int> V){
//look for lone segments
for(int a=0; a<M; a++){
adjList[U[a]].push_back({V[a], a});
adjList[V[a]].push_back({U[a], a});
}
dfs(0, 0);
colouring(0, 1);
int ret[M];
for(int a=0; a<M; a++) ret[a] = ans[a];
return ret;
}
#include <bits/stdc++.h>
using namespace std;
bool resolved;
int prev1, prev2, prev3, prev4, prev5, prev6;
void Init(){
resolved = false;
prev1 = prev2 = prev3 = prev4 = prev5 = prev6 = -1;
}
int Move(vector<int> y){
//check LOL
if(resolved){
//keep moving in different
if(prev1 == 0){
prev1 = 1;
return 1;
}
else{
prev1 = 0;
return 0;
}
}
else{
//check if current place is good ?
if(y[0] + y[1] == 1){
resolved = true;
if(y[0] == 1){
prev1 = 0;
return 0;
}
else{
prev1 = 1;
return 1;
}
}
if(y[0] + y[1] > 2){
if(y[0] == 1){
resolved = true;
prev1 = 0;
return 0;
}
else{
resolved = true;
prev1 = 1;
return 1;
}
}
//now is when on lone
//start moving
if(prev1 == -1){
//first step
return 0;
}
else{
//not first step
prev6 = prev5;
prev5 = prev4;
prev4 = prev3;
prev3 = prev2;
prev2 = prev1;
//look at prev2
if(y[0] == 2){
prev1 = 0;
}
else if(y[1] == 2){
prev1 = 1;
}
else{
if(prev2 == 1){
prev1 = 0;
}
else{
prev1 = 1;
}
}
if(prev1 != prev2 && prev3 == prev4 && prev3 != -1){
resolved = true;
if(prev3 = 0){
//rightdirectoin
return prev1;
}
else{
return -1;
}
}
else{
return prev1;
}
}
}
}
Compilation message
Anthony.cpp:45:7: error: deduced class type 'vector' in function return type
45 | vector::Mark(int N, int M, int A, int B, vector<int> U, vector<int> V){
| ^~
In file included from /usr/include/c++/10/vector:67,
from /usr/include/c++/10/functional:62,
from /usr/include/c++/10/pstl/glue_algorithm_defs.h:13,
from /usr/include/c++/10/algorithm:74,
from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:65,
from Anthony.cpp:1:
/usr/include/c++/10/bits/stl_vector.h:389:11: note: 'template<class _Tp, class _Alloc> class std::vector' declared here
389 | class vector : protected _Vector_base<_Tp, _Alloc>
| ^~~~~~
Catherine.cpp: In function 'int Move(std::vector<int>)':
Catherine.cpp:80:26: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
80 | if(prev3 = 0){
| ~~~~~~^~~
/usr/bin/ld: /tmp/cc91FogG.o: in function `main':
grader_catherine.cpp:(.text.startup+0x41c): undefined reference to `Init(int, int)'
collect2: error: ld returned 1 exit status