Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
55101 alex_liu 最小生成树 (mst) C++ 通过 100 3 MS 512 KB 2112 2022-08-09 11:30:36

Tests(10/10):


#include<bits/stdc++.h> #define int long long using namespace std; const int dx[5]={0,0,0,1,-1},dy[5]={0,1,-1,0,0}; inline int read(){ int x=0,f=0;char c=getchar(); while(c<48||c>57)f|=(!(c^'-')),c=getchar(); while(c>=48&&c<=57)x=(x<<1)+(x<<3)+(c^48),c=getchar(); return f?-x:x; } struct node{int x,y;}; vector<node>v[3]; int n,m,cnt=1,vis[55][55],b[3],minn=0x7f7f7f7f,allmin=0x7f7f7f7f,now; char c[55][55]; inline bool check(int x,int y){ if(x<1||x>n||y<1||y>m)return 0; return 1; } inline void dfs(int x,int y,int num){ if(vis[x][y]||c[x][y]^'X')return; vis[x][y]=num; v[num-1].push_back((node){x,y}); for(int i=1;i<=4;i++){ int nx=x+dx[i],ny=y+dy[i]; if(check(nx,ny))dfs(nx,ny,num); } } signed main(){ n=read(),m=read(); memset(b,127,sizeof b); for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>c[i][j]; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(!(vis[i][j]^0)&&!(c[i][j]^'X'))dfs(i,j,cnt),cnt++; } } for(int i=0;i<v[0].size();i++){ for(int j=0;j<v[1].size();j++){ b[0]=min(b[0],abs(v[0][i].x-v[1][j].x)+abs(v[0][i].y-v[1][j].y)-1); } } for(int i=0;i<v[0].size();i++){ for(int j=0;j<v[2].size();j++){ b[1]=min(b[1],abs(v[0][i].x-v[2][j].x)+abs(v[0][i].y-v[2][j].y)-1); } } for(int i=0;i<v[1].size();i++){ for(int j=0;j<v[2].size();j++){ b[2]=min(b[2],abs(v[1][i].x-v[2][j].x)+abs(v[1][i].y-v[2][j].y)-1); } } sort(b,b+3); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(!(c[i][j]^'.')){ for(int k=0;k<v[0].size();k++)minn=min(minn,abs(i-v[0][k].x)+abs(j-v[0][k].y)); now=minn;minn=0x7f7f7f7f; for(int k=0;k<v[1].size();k++)minn=min(minn,abs(i-v[1][k].x)+abs(j-v[1][k].y)); now+=minn;minn=0x7f7f7f7f; for(int k=0;k<v[2].size();k++)minn=min(minn,abs(i-v[2][k].x)+abs(j-v[2][k].y)); now+=minn;minn=0x7f7f7f7f; allmin=min(allmin,now-2); } } } cout<<min(b[0]+b[1],allmin)<<endl; // cout<<b[0]<<endl<<b[1]<<endl<<b[2]<<endl; // for(int i=1;i<=n;i++){ // for(int j=1;j<=m;j++)cout<<vis[i][j]<<" "; // puts(""); // } return 0; }


测评信息: