提出 #57561766
ソースコード 拡げる
#include <bits/stdc++.h>
using namespace std;
#define f(n, i, x) for (int i = x; i < n; i++)
#define vb push_back
#define ll long long
class DSU
{
public:
vector<vector<int>> parent;
DSU(int n)
{
parent.resize(n, vector<int>(4));
for (int i = 0; i < n; ++i)
{
parent[i][0] = i;
parent[i][1] = i;
parent[i][2] = i;
parent[i][3] = i;
}
}
int find(int x, int y)
{
if (parent[x][y] == x)
return x;
return parent[x][y]=find(parent[x][y], y);
}
};
bool isp(int l1,int r1, int n, int m)
{
return l1>=0&&l1<n&&r1>=0&&r1<m;
}
void update(DSU &dsu, int l1, int r1, int n, int m)
{
if (isp(l1,r1+1, n, m))
{
dsu.parent[l1 * m + r1][0] = dsu.find(l1 * m + r1 + 1, 0);
// cout<<dsu.parent[l1*m+r1][0]/m<<' '<<dsu.parent[l1*m+r1][0]%m<<endl;
}
if (isp(l1 , r1 - 1, n, m))
{
dsu.parent[l1 * m + r1][1] = dsu.find(l1 * m + r1 - 1, 1);
// cout<<dsu.parent[l1*m+r1][1]/m<<' '<<dsu.parent[l1*m+r1][1]%m<<endl;
}
if (isp(l1-1,r1, n, m))
{
dsu.parent[l1 * m + r1][2] = dsu.find((l1 - 1) * m + r1, 2);
// cout<<dsu.parent[l1*m+r1][2]/m<<' '<<dsu.parent[l1*m+r1][2]%m<<endl;
}
if (isp(l1 + 1 , r1, n, m))
{
dsu.parent[l1 * m + r1][3] = dsu.find((l1 + 1) * m + r1, 3);
// cout<<dsu.parent[l1*m+r1][3]/m<<' '<<dsu.parent[l1*m+r1][3]%m<<endl;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m, q;
cin >> n >> m >> q;
DSU dsu(n * m + 1);
vector<int> vis(n * m + 1, 0);
int ans = 0;
f(q, i, 0)
{
int l1, r1;
cin >> l1 >> r1;
l1--, r1--;
if (!vis[l1 * m + r1])
{
vis[l1 * m + r1] = 1;
ans++;
// cout << l1 << ' ' << r1 << endl;
update(dsu, l1, r1, n, m);
}
else
{
int pr = dsu.parent[l1 * m + r1][0];
if (isp(pr/m,pr%m, n, m) && !vis[pr])
{
ans++;
// cout << pr / m << ' ' << pr % m << endl;
vis[pr] = 1;
update(dsu, pr / m, pr % m, n, m);
}
pr = dsu.parent[l1 * m + r1][1];
if (isp(pr/m,pr%m, n, m) && !vis[pr])
{
ans++;
// cout << pr / m << ' ' << pr % m << endl;
vis[pr] = 1;
update(dsu, pr / m, pr % m, n, m);
}
pr = dsu.parent[l1 * m + r1][2];
if (isp(pr/m,pr%m, n, m) && !vis[pr])
{
ans++;
// cout << pr / m << ' ' << pr % m << endl;
vis[pr] = 1;
update(dsu, pr / m, pr % m, n, m);
}
pr = dsu.parent[l1 * m + r1][3];
if (isp(pr/m,pr%m, n, m) && !vis[pr])
{
ans++;
// cout << pr / m << ' ' << pr % m << endl;
vis[pr] = 1;
update(dsu, pr / m, pr % m, n, m);
}
update(dsu, l1, r1, n, m);
}
// cout<<endl;
}
cout << n * m - ans << endl;
}
提出情報
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
0 / 400 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt |
| All |
00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 02_all_break_00.txt, 03_hack_00.txt, 03_hack_01.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| 00_sample_00.txt |
AC |
1 ms |
3484 KiB |
| 00_sample_01.txt |
AC |
1 ms |
3364 KiB |
| 00_sample_02.txt |
AC |
1 ms |
3508 KiB |
| 01_random_00.txt |
WA |
79 ms |
23404 KiB |
| 01_random_01.txt |
WA |
50 ms |
23940 KiB |
| 01_random_02.txt |
WA |
62 ms |
26672 KiB |
| 01_random_03.txt |
WA |
97 ms |
26500 KiB |
| 01_random_04.txt |
WA |
94 ms |
25992 KiB |
| 01_random_05.txt |
WA |
103 ms |
26672 KiB |
| 01_random_06.txt |
WA |
97 ms |
26672 KiB |
| 01_random_07.txt |
WA |
63 ms |
26600 KiB |
| 01_random_08.txt |
WA |
48 ms |
20084 KiB |
| 01_random_09.txt |
AC |
107 ms |
26244 KiB |
| 01_random_10.txt |
WA |
54 ms |
26444 KiB |
| 01_random_11.txt |
WA |
72 ms |
26556 KiB |
| 01_random_12.txt |
AC |
81 ms |
24144 KiB |
| 01_random_13.txt |
AC |
111 ms |
26544 KiB |
| 01_random_14.txt |
WA |
63 ms |
26504 KiB |
| 01_random_15.txt |
AC |
106 ms |
26512 KiB |
| 01_random_16.txt |
WA |
79 ms |
26280 KiB |
| 01_random_17.txt |
WA |
78 ms |
26488 KiB |
| 01_random_18.txt |
AC |
109 ms |
26528 KiB |
| 01_random_19.txt |
WA |
62 ms |
26532 KiB |
| 02_all_break_00.txt |
AC |
46 ms |
26604 KiB |
| 03_hack_00.txt |
AC |
34 ms |
26528 KiB |
| 03_hack_01.txt |
AC |
34 ms |
26516 KiB |