Submission #44661865
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define fro(i, x, y) for(int i = (x);i <= (y);i++)
#define pre(i, x, y) for(int i = (x);i >= (y);i--)
typedef long long ll;
typedef __int128 lll;
typedef unsigned int uint;
typedef pair<int, int> PII;
typedef unsigned long long ull;
const int N = 1000010;
const int mod = 998244353;
int n, m, cnt, tot, a[N], b[N], fa[N], val[N], siz[N], head[N];
struct edge { int to, nxt; } e[N * 2]; int q, dep[N], f[N][20];
inline void add(int x, int y)
{
e[++cnt] = {y, head[x]}, head[x] = cnt;
e[++cnt] = {x, head[y]}, head[y] = cnt;
}
inline int gf(int x)
{
return (fa[x] == x ? x : fa[x] = gf(fa[x]));
}
inline void dfs(int now, int fa)
{
f[now][0] = fa, dep[now] = dep[fa] + 1;
for(int i = 1;i <= 19;i++)
f[now][i] = f[f[now][i - 1]][i - 1];
for(int i = head[now];i;i = e[i].nxt)
if(e[i].to != fa) dfs(e[i].to, now), siz[now] += siz[e[i].to];
if(siz[now] == 0) siz[now]++;
}
inline int check(int x, int y, int z)
{
for(int i = 19;i >= 0;i--)
if(val[f[x][i]] <= z) x = f[x][i];
for(int i = 19;i >= 0;i--)
if(val[f[y][i]] <= z) y = f[y][i];
return (x == y ? siz[x] : siz[x] + siz[y]);
}
signed main()
{
ios::sync_with_stdio(0), cin.tie(0);
cin >> n >> m, val[0] = 1e9;
iota(fa + 1, fa + n + 1, 1), tot = n;
fro(i, 1, m) cin >> a[i] >> b[i];
fro(i, 1, m)
{
int x = gf(a[i]), y = gf(b[i]);
if(x == y) continue; val[++tot] = i;
add(x, tot), add(y, tot);
fa[x] = fa[y] = fa[tot] = tot;
}
dfs(tot, 0), cin >> q;
fro(i, 1, q)
{
int x, y, z;
cin >> x >> y >> z;
int l = 1, r = 1e9, ans;
while(l <= r)
{
int mid = (l + r) / 2;
if(check(x, y, mid) < z)
l = mid + 1;
else r = mid - 1, ans = mid;
}
cout << ans << "\n";
}
return 0;
}
Submission Info
Submission Time
2023-08-17 18:08:50+0900
Task
D - Stamp Rally
User
win114514
Language
C++ (GCC 9.2.1)
Score
1000
Code Size
2039 Byte
Status
AC
Exec Time
584 ms
Memory
32960 KiB
Compile Error
./Main.cpp: In function ‘int main()’:
./Main.cpp:60:9: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
60 | if(x == y) continue; val[++tot] = i;
| ^~
./Main.cpp:60:30: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
60 | if(x == y) continue; val[++tot] = i;
| ^~~
./Main.cpp:77:24: warning: ‘ans’ may be used uninitialized in this function [-Wmaybe-uninitialized]
77 | cout << ans << "\n";
| ^~~~
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
1000 / 1000
Status
Set Name
Test Cases
Sample
0_00.txt
All
0_00.txt, 1_00.txt, 1_01.txt, 1_02.txt, 1_03.txt, 1_04.txt, 1_05.txt, 1_06.txt, 1_07.txt, 1_08.txt, 1_09.txt, 1_10.txt, 1_11.txt, 1_12.txt, 1_13.txt, 1_14.txt, 1_15.txt, 1_16.txt, 1_17.txt, 1_18.txt, 1_19.txt, 1_20.txt, 1_21.txt, 1_22.txt, 1_23.txt, 1_24.txt, 1_25.txt, 1_26.txt, 1_27.txt, 1_28.txt, 1_29.txt, 1_30.txt, 1_31.txt
Case Name
Status
Exec Time
Memory
0_00.txt
AC
6 ms
3532 KiB
1_00.txt
AC
495 ms
32960 KiB
1_01.txt
AC
584 ms
32876 KiB
1_02.txt
AC
488 ms
29700 KiB
1_03.txt
AC
555 ms
29660 KiB
1_04.txt
AC
489 ms
28676 KiB
1_05.txt
AC
548 ms
28788 KiB
1_06.txt
AC
503 ms
27828 KiB
1_07.txt
AC
551 ms
27840 KiB
1_08.txt
AC
509 ms
26828 KiB
1_09.txt
AC
538 ms
26776 KiB
1_10.txt
AC
513 ms
26644 KiB
1_11.txt
AC
554 ms
26708 KiB
1_12.txt
AC
499 ms
26940 KiB
1_13.txt
AC
498 ms
26940 KiB
1_14.txt
AC
449 ms
29832 KiB
1_15.txt
AC
433 ms
29720 KiB
1_16.txt
AC
447 ms
26204 KiB
1_17.txt
AC
479 ms
26816 KiB
1_18.txt
AC
476 ms
26636 KiB
1_19.txt
AC
454 ms
26748 KiB
1_20.txt
AC
476 ms
25332 KiB
1_21.txt
AC
474 ms
26692 KiB
1_22.txt
AC
483 ms
26408 KiB
1_23.txt
AC
498 ms
26552 KiB
1_24.txt
AC
478 ms
25544 KiB
1_25.txt
AC
492 ms
26528 KiB
1_26.txt
AC
474 ms
25516 KiB
1_27.txt
AC
493 ms
26648 KiB
1_28.txt
AC
484 ms
26312 KiB
1_29.txt
AC
488 ms
25552 KiB
1_30.txt
AC
477 ms
26544 KiB
1_31.txt
AC
488 ms
25252 KiB