QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#218712#5523. Graph Problem With Small $n$isaunoyaTL 0ms3660kbC++232.1kb2023-10-18 17:23:592023-10-18 17:23:59

Judging History

This is the latest submission verdict.

  • [2023-10-18 17:23:59]
  • Judged
  • Verdict: TL
  • Time: 0ms
  • Memory: 3660kb
  • [2023-10-18 17:23:59]
  • Submitted

answer

#include <bits/stdc++.h>
#ifndef LOCAL
#define debug(...) 42
#else
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)
#endif
#define rep1(a) for (int i = 0; i < a; i++)
#define rep2(i, a) for (int i = 0; i < a; i++)
#define rep3(i, a, b) for (int i = a; i < b; i++)
#define rep4(i, a, b, c) for (int i = a; i < b; i += c)
#define overload4(a, b, c, d, e, ...) e
#define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__)

#define pb emplace_back
using namespace std;
template <typename T, typename T2> void cmin(T &x, const T2 &y) {
  x = x < y ? x : y;
}
template <typename T, typename T2> void cmax(T &x, const T2 &y) {
  x = x > y ? x : y;
}
using ll = long long;
using vi = vector<int>;
using pii = pair<int, int>;
template <class T> using vc = vector<T>;
template <class T> using pq = priority_queue<T>;
template <class T> using pqg = priority_queue<T, vector<T>, greater<T>>;
mt19937 rng(time(NULL));
const int inf = 1000000000;
const ll lnf = 1000000000000000000;
#define sz(x) int((x).size())
#define all(x) begin(x), end(x)
#define fi first
#define se second

void solve() {
  int n;
  cin >> n;
  vc<vi> g(n, vi(n));
  rep(i, n) rep(j, n) {
    char c;
    cin >> c;
    if (c == '1')
      g[i][j] = 1;
    else
      g[i][j] = 0;
  }
  vc<vi> ans(n, vi(n));
  vc<vi> dp(n, vi(1 << n, 0));
  vi w;
  rep(u, n) {
    rep(i,n) rep(j,1<<n)dp[i][j]=0;
    dp[u][1 << u] = 1;
    rep(i, 1 << n) {
      w.clear();
      rep(j, n) if (!(i >> j & 1)) { w.pb(j); }
      rep(t, n) {
        if (i >> t & 1)
          if (dp[t][i]) {
            for (auto v : w) {
              if (g[t][v]) {
                int s = i | 1 << v;
                dp[v][s] = 1;
              }
            }
          }
      }
    }
    rep(v, n) if (dp[v].back()) ans[u][v] = 1;
  }
  rep(i, n) rep(j, n) { cout << ans[i][j]; if(j+1==n)cout<<"\n";}
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int t = 1;
  // cin >> t;
  while (t--) {
    solve();
  }
  return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3660kb

input:

4
0110
1010
1101
0010

output:

0001
0001
0000
1100

result:

ok 4 lines

Test #2:

score: 0
Accepted
time: 0ms
memory: 3652kb

input:

6
010001
101000
010100
001010
000101
100010

output:

010001
101000
010100
001010
000101
100010

result:

ok 6 lines

Test #3:

score: 0
Accepted
time: 0ms
memory: 3656kb

input:

4
0111
1011
1101
1110

output:

0111
1011
1101
1110

result:

ok 4 lines

Test #4:

score: -100
Time Limit Exceeded

input:

23
00000000000000000000000
00000000000000000000000
00000000000000000000000
00000000000000000000000
00000000000000000000000
00000000000000000000000
00000000000000000000000
00000000000000000000000
00000000000000000000000
00000000000000000000000
00000000000000000000000
00000000000000000000000
000000000...

output:


result: