Submission #3450739


Source Code Expand

#include <bits/stdc++.h>

using namespace std;

#define INF 100000000
#define YJ 1145141919
#define INF_INT_MAX 2147483647
#define INF_LL 9223372036854775
#define INF_LL_MAX 9223372036854775807
#define EPS 1e-10
#define MOD 1000000007
#define Pi acos(-1)
#define LL long long
#define ULL unsigned long long
#define LD long double

#define int long long

#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) FOR(i,0,n)
#define ALL(a)  begin((a)), end((a))
#define RALL(a) (a).rbegin(), (a).rend()
#define PB push_back
#define MP make_pair
#define SZ(a) int((a).size())

const int MAX_N = 105;
int N;
int A[MAX_N];

class Dinic{
public:
  Dinic(int v) : MAX_V(v) {
    init();
    G.resize(v);
    level.resize(v);
    iter.resize(v);
  }

  void init() {
    G.clear(); level.clear(); iter.clear();
  }

  void addEdge(LL from, LL to, LL cap) {
    G[from].push_back(edge(to, cap, G[to].size()));
    G[to].push_back(edge(from, 0, G[from].size()-1));
  }

  void bfs(LL s) {
      fill(begin(level), end(level), -1);
      queue<LL> que;
      level[s] = 0;
      que.push(s);
      while(!que.empty()){
          LL v = que.front(); que.pop();
          for(LL i = 0; i < G[v].size(); i++) {
              edge &e = G[v][i];
              if(e.cap > 0 && level[e.to] < 0) {
                  level[e.to] = level[v]+1;
                  que.push(e.to);
              }
          }
      }
  }

  LL dfs(LL v, LL t, LL f) {
      if(v==t) return f;
      for(LL &i = iter[v]; i < G[v].size(); i++) {
          edge &e = G[v][i];
          if(e.cap > 0 && level[v] < level[e.to]) {
              LL d = dfs(e.to, t, min(f, e.cap));
              if(d > 0) {
                  e.cap -= d;
                  G[e.to][e.rev].cap += d;
                  return d;
              }
          }
      }
      return 0;
  }

  LL maxFlow(LL s, LL t)
  {
      LL flow = 0;
      while(true) {
          bfs(s);
          if(level[t] < 0) {
              return flow;
          }
          fill(begin(iter), end(iter), 0);
          LL f;
          while((f = dfs(s, t, INF)) > 0) {
              flow += f;
          }
      }
  }

private:
  int MAX_V;

  struct edge {
      LL to, cap, rev;
      edge(LL to, LL cap, LL rev) : to(to), cap(cap), rev(rev) {}
  };

  vector<vector<edge>> G;
  vector<LL> level;
  vector<LL> iter;
};

signed main()
{
  cin >> N;
  REP(i,N) {
    cin >> A[i];
  }

  int ans = 0;
  Dinic dinic(N+5);
  REP(i,N) {
    if(A[i] >= 0) {
      ans += A[i];
      dinic.addEdge(i,N+1,A[i]);
    } else {
      dinic.addEdge(N,i,-A[i]);
    }
  }

  FOR(i,1,N+1) {
    for(int j = 2; i*j <= N; j++) { 
      dinic.addEdge(i-1,i*j-1,INF_LL);
    }
  }

  cout << ans - dinic.maxFlow(N,N+1) << endl;

  return 0;
}

Submission Info

Submission Time
Task E - MUL
User takoshi
Language C++14 (GCC 5.4.1)
Score 700
Code Size 2871 Byte
Status AC
Exec Time 2 ms
Memory 384 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 700 / 700
Status
AC × 4
AC × 49
Set Name Test Cases
Sample example_0, example_1, example_2, example_3
All example_0, example_1, example_2, example_3, kimeuti_0, kimeuti_1, kimeuti_10, kimeuti_11, kimeuti_12, kimeuti_13, kimeuti_14, kimeuti_15, kimeuti_16, kimeuti_17, kimeuti_18, kimeuti_19, kimeuti_2, kimeuti_3, kimeuti_4, kimeuti_5, kimeuti_6, kimeuti_7, kimeuti_8, kimeuti_9, rand_0, rand_1, rand_10, rand_11, rand_12, rand_13, rand_14, rand_15, rand_16, rand_17, rand_18, rand_19, rand_2, rand_3, rand_4, rand_5, rand_6, rand_7, rand_8, rand_9, small_0, small_1, small_2, small_3, small_4
Case Name Status Exec Time Memory
example_0 AC 1 ms 256 KB
example_1 AC 1 ms 256 KB
example_2 AC 1 ms 256 KB
example_3 AC 1 ms 256 KB
kimeuti_0 AC 1 ms 256 KB
kimeuti_1 AC 1 ms 256 KB
kimeuti_10 AC 1 ms 256 KB
kimeuti_11 AC 1 ms 256 KB
kimeuti_12 AC 1 ms 256 KB
kimeuti_13 AC 1 ms 256 KB
kimeuti_14 AC 1 ms 256 KB
kimeuti_15 AC 1 ms 256 KB
kimeuti_16 AC 1 ms 256 KB
kimeuti_17 AC 1 ms 256 KB
kimeuti_18 AC 1 ms 256 KB
kimeuti_19 AC 1 ms 256 KB
kimeuti_2 AC 2 ms 384 KB
kimeuti_3 AC 1 ms 256 KB
kimeuti_4 AC 1 ms 256 KB
kimeuti_5 AC 1 ms 256 KB
kimeuti_6 AC 1 ms 256 KB
kimeuti_7 AC 1 ms 256 KB
kimeuti_8 AC 1 ms 256 KB
kimeuti_9 AC 1 ms 256 KB
rand_0 AC 1 ms 256 KB
rand_1 AC 1 ms 256 KB
rand_10 AC 1 ms 256 KB
rand_11 AC 1 ms 256 KB
rand_12 AC 1 ms 256 KB
rand_13 AC 1 ms 256 KB
rand_14 AC 1 ms 256 KB
rand_15 AC 1 ms 256 KB
rand_16 AC 1 ms 256 KB
rand_17 AC 1 ms 256 KB
rand_18 AC 1 ms 256 KB
rand_19 AC 1 ms 256 KB
rand_2 AC 1 ms 256 KB
rand_3 AC 1 ms 256 KB
rand_4 AC 1 ms 256 KB
rand_5 AC 1 ms 256 KB
rand_6 AC 1 ms 256 KB
rand_7 AC 1 ms 256 KB
rand_8 AC 1 ms 256 KB
rand_9 AC 1 ms 256 KB
small_0 AC 1 ms 256 KB
small_1 AC 1 ms 256 KB
small_2 AC 1 ms 256 KB
small_3 AC 1 ms 256 KB
small_4 AC 1 ms 256 KB