原题链接
可以看出,如果未填充的部分是一条链的话,可以把剩下的都添进去。比如,第一次填倒数第二个,然后移动到倒数第一个,以此类推。
用并查集判的。
#define PI acos(-1) const int maxn=1e5+10; const ll mod=1e9+7; int g[10][10]; int root[15]; int Find(int x) { if(x!=root[x]) root[x]=Find(root[x]); return root[x]; } int main() { for(int i=1; i<=8; i++) { int x=(i+2)%8+1,y=(i+4)%8+1; g[i][x]=g[x][i]=g[i][y]=g[y][i]=1; } int T=read; while(T--) { for(int i=1; i<=8; i++) root[i]=i; string s; cin>>s; vector<int>v; for(int i=0; i<s.size(); i++) if(s[i]=='0') v.push_back(i+1); bool flag=1; for(int i=0; i<v.size(); i++) for(int j=0; j<v.size(); j++) if(i!=j) { if(g[v[i]][v[j]]) { int fu=Find(v[i]),fv=Find(v[j]); if(fu!=fv) root[fu]=fv; } } int cnt=0; for(int i=0;i<v.size();i++) if(v[i]==Find(v[i])) cnt++; if(cnt==1) puts("Yes"); else puts("No"); } return 0; }