#include <bits/stdc++.h>
using namespace std;
typedef bitset<200> State;
vector<State> graph;
State advance(const State& state) {
State next;
for (int i=0; i<graph.size(); ++i)
if (state[i])
next |= graph[i];
return next;
}
int main() {
int n, b, r;
cin >> n >> b >> r;
graph.resize(n);
for (int i = 0;i <n;++i) {
string buf;
cin >> buf;
reverse(buf.begin(),buf.end());
graph[i] = State(buf);
}
State start;
for (int i=0; i<r;++i){
int a;
cin >> a;
--a;
start[a] = true;
}
State finish;
for (int i = 0;i<b;++i)
finish[i] = true;
State slower = start;
long long counter = 0;
while (true) {
if ((finish | start) == finish)
break;
//cerr << counter << " " << start.to_string() << endl;
start = advance(start);
++counter;
if ((finish | start) == finish)
break;
//cerr << counter << " " << start.to_string() << endl;
start = advance(start);
++counter;
slower = advance(slower);
if (slower == start) {
cout << -1 << endl;
return 0;
}
}
cout << counter << endl;
return 0;
}
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #include <bits/stdc++.h> using namespace std; typedef bitset<200> State; vector<State> graph; State advance(const State& state) { State next; for (int i=0; i<graph.size(); ++i) if (state[i]) next |= graph[i]; return next; } int main() { int n, b, r; cin >> n >> b >> r; graph.resize(n); for (int i = 0;i <n;++i) { string buf; cin >> buf; reverse(buf.begin(),buf.end()); graph[i] = State(buf); } State start; for (int i=0; i<r;++i){ int a; cin >> a; --a; start[a] = true; } State finish; for (int i = 0;i<b;++i) finish[i] = true; State slower = start; long long counter = 0; while (true) { if ((finish | start) == finish) break; //cerr << counter << " " << start.to_string() << endl; start = advance(start); ++counter; if ((finish | start) == finish) break; //cerr << counter << " " << start.to_string() << endl; start = advance(start); ++counter; slower = advance(slower); if (slower == start) { cout << -1 << endl; return 0; } } cout << counter << endl; return 0; } |
English