# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1221818 | brinton | Permutation Game (APIO25_permgame) | C++20 | 0 ms | 0 KiB |
#include "permgame.h"
#include <bits/stdc++.h>
using namespace std;
/*
m: vertices in u,v
e: edges in u,v
n: permutation length;
*/
int Alice(int m, int e, vector<int> u, vector<int> v, int N, vector<int> p) {
int already = 0;
for(int i = 0;i < N;i++) if(p[i]==i) already++;
vector<vector<int>> edges(m);
vector<int> deg(m,0);
for(int i = 0;i < e;i++){
edges[u[i]].push_back(v[i]);
edges[v[i]].push_back(u[i]);
deg[u[i]]++;deg[v[i]]++;
}
if(e > m || *max_element(deg.begin(),deg.end()) > 2) {
return already;
}else if(e == m-1){
set<int> s;
for(int i = 0;i < N;i++) if(p[i] != i) s.insert(i);
while(s.size() >= m){
vector<int> t(s.begin(),next(s.begin(),m));
int j = Bob(t);
swap(p[t[u[j]]], p[t[v[j]]]);
if(p[t[u[j]]] == t[u[j]] s.erase(t[u[j]]));
if(p[t[v[j]]] == t[u[j]] s.erase(t[v[j]]));
}
return N-m;
}
}