#include <cstdio> #include <bitset> using namespace std; typedef bitset<200> bs; bs g[200]; bs zle, teraz; char s[201]; int main() { int MAX = 5; int n, b, r; scanf("%d %d %d", &n, &b, &r); for(int i = b; i < n; i++) zle[i] = 1; for(int i = 0; i < n; i++) { scanf("%s", s); for(int j = 0; j < n; j++) g[i][j] = s[j] == '1'; } while(r--) { int x; scanf("%d", &x); teraz[x-1] = 1; } for(int i = 0; i < MAX; i++) { if((teraz & zle).none()) { printf("%d\n", i); return 0; } bs nowe; for(int j = 0; j < n; j++) if(teraz[j]) nowe |= g[j]; teraz = nowe; } printf("%d\n", -1); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <cstdio> #include <bitset> using namespace std; typedef bitset<200> bs; bs g[200]; bs zle, teraz; char s[201]; int main() { int MAX = 5; int n, b, r; scanf("%d %d %d", &n, &b, &r); for(int i = b; i < n; i++) zle[i] = 1; for(int i = 0; i < n; i++) { scanf("%s", s); for(int j = 0; j < n; j++) g[i][j] = s[j] == '1'; } while(r--) { int x; scanf("%d", &x); teraz[x-1] = 1; } for(int i = 0; i < MAX; i++) { if((teraz & zle).none()) { printf("%d\n", i); return 0; } bs nowe; for(int j = 0; j < n; j++) if(teraz[j]) nowe |= g[j]; teraz = nowe; } printf("%d\n", -1); } |