rt,第一问就错了 qwq!!!
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
int n,m;
int s[15][15];
int vi[122];
int v[15],tot;
vector<int> g[122];
bool cor(int x,int y){
return x>0&&x<=n&&y>0&&y<=m;
}
int hsh(pair<int,int> p){
return (p.first-1)*m+p.second;
}
pair<int,int> rehsh(int h){
return {(h/m)+1,h%m};
}
int dp[122][(1<<11)];
pair<int,int> pre[122][(1<<11)];
int kpr[122][(1<<11)];
int vis[122],w[122];
int Y;
void shr(int A){
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> Q;
rep(i,1,Y)Q.push({dp[i][A],i}),vis[i]=0;
while(!Q.empty()){
int u=Q.top().second;Q.pop();
if(vis[u])continue;
vis[u]=1;
for(auto v:g[u]){
if(dp[u][A]+::w[v]<dp[v][A]){
kpr[v][A]=u;
dp[v][A]=dp[u][A]+::w[v];
Q.push({dp[v][A],v});
}
}
}
}
void dfs(int x,int y){
vi[x]=1;
if(!kpr[x][y]){
if(pre[x][y]!=make_pair(0ll,0ll)){
dfs(x,pre[x][y].first);
dfs(x,pre[x][y].second);
}
}else{
dfs(kpr[x][y],y);
}
}
signed main(){
memset(dp,63,sizeof dp);
cin>>n>>m;Y=n*m;
rep(i,1,n){
rep(j,1,m){
cin>>s[i][j];
w[hsh({i,j})]=s[i][j];
if(s[i][j]==0){
v[tot++]=hsh({i,j});
dp[hsh({i,j})][(1<<(tot-1))]=0;
}
if(cor(i-1,j)){
g[hsh({i,j})].push_back(hsh({i-1,j}));
g[hsh({i-1,j})].push_back(hsh({i,j}));
}
if(cor(i,j-1)){
g[hsh({i,j})].push_back(hsh({i,j-1}));
g[hsh({i,j-1})].push_back(hsh({i,j}));
}
}
}
int U=(1<<tot)-1;
for(int i=1;i<=U;i++){
rep(k,1,Y){
for(int j=i&(i-1);j;j=i&(j-1)){
if(dp[k][j]+dp[k][j^i]<dp[k][i]){
pre[k][i]={j,j^i};
dp[k][i]=min(dp[k][i],dp[k][j]+dp[k][j^i]);
}
}
}shr(i);
}int ans=1e9;
int pos=0;
rep(i,1,Y){
if(dp[i][U]<ans)
ans=min(ans,dp[i][U]),pos=i;
}cout<<ans<<'\n';
dfs(pos,U);
rep(i,1,n){
rep(j,1,m){
if(s[i][j]==0){
cout<<'x';
}else if(vi[(i-1)*m+j]){
cout<<'o';
}else cout<<'_';
}cout<<'\n';
}
}