Resolví este problema y me generó una gran duda ya que obtuve AC luego de hacer un cambio que consideraba innecesario.
El código que obtuvo AC hacía esto por cada testcase:
Código AC
void solve(){
int n,m;
cin>>n>>m;
int matrix[m][n];
forn(i,n) forn(j,m) cin>>matrix[j][i];
set<pair<int,int>> edges;
forn(i,m){
int u = -1, v = -1;
forn(j,n){
if(!matrix[i][j]) continue;
if(u == -1) u = j;
else if(v == -1) v = j;
else{
cout<<"No\n";
return;
}
}
if(u == -1 || v == -1){
cout<<"No\n";
return;
}
if(edges.count({v,u})){
cout<<"No\n";
return;
}
edges.insert({u,v});
edges.insert({v,u});
}
cout<<"Yes\n";
}
Como los nodos candidatos a conectar se recorren en orden de 0 a n-1 pensé que no haría falta insertarla en ambos sentidos. Sin embargo, este código obtuvo WA.
Código WA
void solve(){
int n,m;
cin>>n>>m;
int matrix[m][n];
forn(i,n) forn(j,m) cin>>matrix[j][i];
set<pair<int,int>> edges;
forn(i,m){
int u = -1, v = -1;
forn(j,n){
if(!matrix[i][j]) continue;
if(u == -1) u = j;
else if(v == -1) v = j;
else{
cout<<"No\n";
return;
}
}
if(edges.count({u,v})){
cout<<"No\n";
return;
}
if(v == -1){
cout<<"No\n";
return;
}
edges.insert({u,v});
}
cout<<"Yes\n";
}
Cuestión que me no quiero quedarme con la duda y quisiera saber si alguien puede darme una respuesta. Capaz me estoy olvidando algún detalle y no lo estoy viendo .
¡¡¡Muchas gracias !!!