SRM551 Div1 Medium

Colorful Wolves

题意:

有一只狼可以把自己的颜色在 n n 种颜色之间切换,每次切换需要花费一天的时间,颜色编号为 0n1 0 ∼ n − 1 ,给定 n×n n × n 的由 Y ′ Y ′ N ′ N ′ 组成的字符矩阵 colormap c o l o r m a p colormap[i][j]=Y c o l o r m a p [ i ] [ j ] = ′ Y ′ 表示狼可以从颜色 i i 切换到颜色 j j

每一天,如果他不能改变自己的颜色,他会保持自己的颜色不变,
否则,他会变成能变成的编号最小的颜色。
0 0 天狼的颜色为 0 0 ,他想变成颜色 n1 n − 1 ,你需要通过修改 colormap c o l o r m a p 来完成这一目标。
也就是说,你可以花费 1 1 单位代价来把某个位置的 Y ′ Y ′ 改成 N ′ N ′
求最小花费,若无法完成目标,返回 1 − 1

2n50 2 ≤ n ≤ 50

思路:

最短路
因为只能变成编号最小的,就有一定的拓扑序,那么跑个最短路即可。
由于n只有50,即floryd就可以轻松切掉此题。

code:

#define N 55

int n;
char s[N][N];
int dp[N][N];

int main(){
 scanf("%d",&n);
 bool flag=0;
 REP(i,1,n){
 int cnt=0;
 scanf("%s",s[i]+1);
 REP(j,1,n)dp[i][j]=s[i][j]=='Y'?(cnt++):INF;
 }
 REP(k,1,n) REP(i,1,n) REP(j,1,n)chkmin(dp[i][j],dp[i][k]+dp[k][j]);
 printf("%d\n",dp[1][n]==INF?-1:dp[1][n]);
 return 0;
}
点赞