#pragma once #include #define M_PI 3.14159265358979323846 // pi using namespace std; typedef long long ll; typedef unsigned long long ull; typedef vector VI; typedef pair P; typedef tuple t3; typedef tuple t4; #define rep(a,n) for(int a = 0;a < n;a++) #define repi(a,b,n) for(int a = b;a < n;a++) const ll mod = 1000000007; bool Compare(t4& left, t4& right) { ll a, b, d, e, f,h; char c, g; tie(a, b, c, d) = left; tie(e, f, g, h) = right; if (a == e) { return d < h; } return a < e; } ll n; vector ok; vector> vs; bool dfs(int id) { if (ok[id] == 1) return true; if (ok[id] == 0) return false; ok[id] = 0; for (int i = 0; i < n; i++) { if (vs[id][i]) { if (!dfs(i)) { return false; } } } ok[id] = 1; return true; } int main(void) { cin >> n; vs.resize(n, vector(n, 0)); rep(i, n) { rep(j, n) { cin >> vs[i][j]; } } vector as(n, 0); rep(i, n) { cin >> as[i]; } ok.resize(n, -1); ll m = 1e15; rep(i, 1 << n) { ok.assign(n, -1); ll sum = 0; rep(j, n) { if (i & (1 << j)) { ok[j] = 1; sum += as[j]; } } bool valid = true; rep(j, n) { if (!dfs(j)) { valid = false; break; } } if (valid) { m = min(m, sum); } } cout << m << endl; return 0; }