Official
F - 地図の塗り分け/Coloring map Editorial by sugarrr
問題文の条件の否定を考えて、答えが No
になる条件を考えます。
答えが No
となるための必要十分条件は、上下左右に隣り合う \(2\) つのマスで、
- 異なる州である
- 同じ色で塗られている
を両方満たすものが存在することです。
よって、隣り合うマスを全探索すれば答えを求めることができます。
細かい点は実装例も参考にしてください。
C++の実装例
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void NO(){
cout<<"No"<<endl;
exit(0);//プログラムを終了する
}
signed main(){
ll h,w,n;cin>>h>>w>>n;
ll a[h][w];
for(int i=0;i<=h-1;i++){
for(int j=0;j<=w-1;j++){
cin>>a[i][j];
}
}
ll c[n+1];
for(int i=1;i<=n;i++)cin>>c[i];
for(int i=0;i<=h-1;i++){
for(int j=0;j<=w-1;j++){
if(i+1<=h-1 && a[i][j] != a[i+1][j] && c[a[i][j]] == c[a[i+1][j]]){
NO();
}
if(j+1<=w-1 && a[i][j] != a[i][j+1] && c[a[i][j]] == c[a[i][j+1]]){
NO();
}
}
}
cout<<"Yes"<<endl;
return 0;
}
posted:
last update: