Your code did not compile: compiling generated stub/wrapper took too long (not done after 30023 ms)
#include <bits/stdc++.h>
using namespace std;
#define de(x) cout<<#x<<"="<<x<<endl
using ll = long long;
const int N = 55;
class ThreeColorability {
private:
int n,m,fa[N],a[N][N],vis[N],fl=1;
int adj[N][N];
vector<int> g[N];
void init(){
memset(vis,-1,sizeof vis);
memset(adj,0,sizeof adj);
for (int i=0; i<N; i++){
fa[i]=i;
}
}
int ff(int x){
return x==fa[x]?x:fa[x]=ff(fa[x]);
}
int merge(int x,int y){
x=ff(x);
y=ff(y);
if (x!=y){
fa[x]=y;
}
}
void dfs(int u,int col){
if (~vis[u]){
if (vis[u]!=col){
fl=0;
}
return;
}
vis[u]=col;
for (auto v : g[u]){
dfs(v,col^1);
}
}
public:
vector<string> lexSmallest(vector<string> cells){
init();
n=cells.size();
m=cells[0].size();
for (int i=0; i<n; i++){
for (int j=0; j<m; j++){
char ch=cells[i][j];
if (ch=='?'){
a[i][j]=-1;
}
else if (ch=='N'){
a[i][j]=0;
}
else{
a[i][j]=1;
}
}
}
for (int i=1; i<n; i++){
for (int j=0; j<m; j++){
for (int k=j+1; k<m; k++){
if (a[i][j]>=0 && a[i][k]>=0){
if (a[i][j]!=a[i][k]){
adj[j][k]=1;
adj[k][j]=1;
}
else{
merge(j,k);
}
}
}
}
}
for (int i=0; i<m; i++){
for (int j=i+1; j<m; j++){
if (adj[i][j]){
int x=ff(i);
int y=ff(j);
g[x].push_back(y);
g[y].push_back(x);
}
}
}
for (int i=0; i<m; i++){
if (~a[0][i]){
dfs(ff(i),a[0][i]);
}
}
for (int i=0; i<m; i++){
if (vis[ff(i)]<0){
dfs(ff(i),0);
}
}
if (!fl){
return {};
}
// 调整
for (int i=0; i<m; i++){
a[0][i]=vis[ff(i)];
}
for (int i=1; i<n; i++){
bool h1=0,dif=0;
for (int j=0; j<m; j++){
if (~a[i][j]){
h1=1;
dif|=(a[0][j]!=a[i][j]);
}
}
if (!h1){
if (a[0][0]!=0){
dif=1;
}
}
for (int j=0; j<m; j++){
a[i][j]=a[0][j]^dif;
}
}
vector<string> res;
res.resize(n);
for (int i=0; i<n; i++){
res[i].resize(m);
for (int j=0; j<m; j++){
if (a[i][j]){
res[i][j]='Z';
}
else{
res[i][j]='N';
}
}
}
return res;
}
};
ThreeColorability 这一题。