『PG2』消除萝卜 B

Luogu
IDLGP9900
Time1000ms
Memory128MB
DifficultyP3
贪心
有 $n\times 2$ 的两列萝卜,萝卜分白萝卜和红萝卜,我们使用 $a_{i,j}=0/1$ 来表示第 $i$ 行第 $j$ 个萝卜是白萝卜还是红萝卜。 你每次可以花 $1$ 的代价,选定一个有萝卜的位置,并将这个萝卜所在的由同种颜色萝卜所构成的四连通极大连通块的萝卜全部拿走,然后一个在第 $i$ 行的萝卜如果其对应的第 $i-1$ 行的位置没有萝卜,就会掉落至第 $i-1$ 行。 同时你也可以花初始为 $0$ 的代价,选定 $k=1/2$ 而将第 $k$ 列的所有萝卜上移($a_{i,k}\to a_{i+1,k}$),并将一个红萝卜即 $1$ 放在第一行第 $k$ 个($1\to a_{1,k}$),此后这个操作代价 $+1$。 请问拿走所有萝卜的最小代价是多少。 ## Input 第一行包含一个正整数 $n$ 表示有多少行萝卜。 接下来 $n$ 行,第 $i$ 行两个整数分别为 $a_{i,1},a_{i,2}$。 ## Output 一行一个整数表示你的答案 [samples] ## Note 对于所有测试点 $a_{i,j}\in \{0,1\}$,$1\leq n\leq 5\times 10^6$,保证 $a_{i,1}\neq a_{i,2}$。 **本题使用捆绑测试** $\sf subtask \ 1: n\leq10 \ \ \ \ \ \ \ \ \ \ \ 30pts $ $\sf subtask \ 2: n\leq100 \ \ \ \ \ \ \ \ \ 20 pts$ $\sf subtask \ 3: n\leq5000 \ \ \ \ \ \ \ 20 pts$ $\sf subtask \ 4: n\leq5000000 \ 30pts$
Samples
Input #1
4
0 1
0 1
0 1
0 1
Output #1
2
Input #2
6
1 0
1 0
0 1
0 1
1 0
1 0
Output #2
3
API Response (JSON)
{
  "problem": {
    "name": "『PG2』消除萝卜 B",
    "description": {
      "content": "有 $n\\times 2$ 的两列萝卜,萝卜分白萝卜和红萝卜,我们使用 $a_{i,j}=0/1$ 来表示第 $i$ 行第 $j$ 个萝卜是白萝卜还是红萝卜。 你每次可以花 $1$ 的代价,选定一个有萝卜的位置,并将这个萝卜所在的由同种颜色萝卜所构成的四连通极大连通块的萝卜全部拿走,然后一个在第 $i$ 行的萝卜如果其对应的第 $i-1$ 行的位置没有萝卜,就会掉落至第 $i-1$ 行。 同时",
      "description_type": "Markdown"
    },
    "platform": "Luogu",
    "limit": {
      "time_limit": 1000,
      "memory_limit": 131072
    },
    "difficulty": {
      "LuoguStyle": "P3"
    },
    "is_remote": true,
    "is_sync": true,
    "sync_url": null,
    "sign": "LGP9900"
  },
  "statements": [
    {
      "statement_type": "Markdown",
      "content": "有 $n\\times 2$ 的两列萝卜,萝卜分白萝卜和红萝卜,我们使用 $a_{i,j}=0/1$ 来表示第 $i$ 行第 $j$ 个萝卜是白萝卜还是红萝卜。\n\n你每次可以花 $1$ 的代价,选定一个有萝卜的位置,并将这个萝卜所在的由同种颜色萝卜所构成的四连通极大连通块的萝卜全部拿走,然后一个在第 $i$ 行的萝卜如果其对应的第 $i-1$ 行的位置没有萝卜,就会掉落至第 $i-1$ 行。\n\n同时...",
      "is_translate": false,
      "language": "English"
    }
  ]
}
Full JSON Raw Segments