95E - Lucky Country - CodeForces Solution


dp dsu graphs *2500

Please click on ads to support us..

C++ Code:

#include <bits/stdc++.h>
using namespace std;

const int MAXN = 1e5 + 1;
vector<int> adj[MAXN];
vector<bool> visited(MAXN);
vector<int> compCount(MAXN), dp(MAXN);

int dfs(int v, int p) {
  if (visited[v]) return 0;
  visited[v] = true;
  int count = 1;
  for (int i : adj[v]) {
    if (i != p) {
      count += dfs(i, v);
    }
  }
  return count;
}

bool lucky(int x) {
  if (x == 0) return false;
  while (x > 0) {
    if (x % 10 != 4 && x % 10 != 7) {
      return false;
    }
    x /= 10;
  }
  return true;
}

int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    adj[--a].push_back(--b);
    adj[b].push_back(a);
  }
  for (int i = 0; i < n; i++) {
    if (!visited[i]) {
      compCount[dfs(i, -1)]++;
    }
  }

  for (int i = 1; i <= n; i++) {
    dp[i] = MAXN;
  }
  for (int i = 1; i <= n; i++) {
    if (compCount[i] > 0) {
      for (int mod = 0; mod < i; mod++) {
        deque<pair<int,int>> dq;
        int edges = 0;
        for (int j = mod; j <= n; j += i) {
          while (!dq.empty() && dp[j] - edges <= dq.back().first) {
            dq.pop_back();
          }
          dq.push_back({dp[j] - edges, j});
          dp[j] = dq.front().first + edges;
          if (dq.front().second == j - i * compCount[i]) {
            dq.pop_front();
          }
          edges++;
        }
      }
    }
  }
  
  int ans = MAXN;
  for (int i = 1; i < MAXN; i++) {
    if (lucky(i) && dp[i] > 0) {
      ans = min(ans, dp[i]);
    }
  }
  if (ans != MAXN) {
    cout << ans-1 << endl;
  } else {
    cout << -1 << endl;
  }
  
  return 0;
}

  	 	 		 	   			      		  					


Comments

Submit
0 Comments
More Questions

448A - Rewards
1622A - Construct a Rectangle
1620A - Equal or Not Equal
1517A - Sum of 2050
620A - Professor GukiZ's Robot
1342A - Road To Zero
1520A - Do Not Be Distracted
352A - Jeff and Digits
1327A - Sum of Odd Integers
1276A - As Simple as One and Two
812C - Sagheer and Nubian Market
272A - Dima and Friends
1352C - K-th Not Divisible by n
545C - Woodcutters
1528B - Kavi on Pairing Duty
339B - Xenia and Ringroad
189A - Cut Ribbon
1182A - Filling Shapes
82A - Double Cola
45A - Codecraft III
1242A - Tile Painting
1663E - Are You Safe
1663D - Is it rated - 3
1311A - Add Odd or Subtract Even
977F - Consecutive Subsequence
939A - Love Triangle
755A - PolandBall and Hypothesis
760B - Frodo and pillows
1006A - Adjacent Replacements
1195C - Basketball Exercise