Submission #71480398
Source Code Expand
#include <stdio.h>
#include <stdarg.h>
#include <vector>
template<unsigned int bufferLength = 1048576U>
class scanner
{
private:
unsigned int (*read)(char*, unsigned int);
char buffer[bufferLength];
unsigned int begin, end;
bool eof;
int _getchar(void)
{
if (eof)
return -1;
if (begin == end)
{
end = read(buffer, bufferLength);
begin = 0;
if (end == 0)
{
eof = true;
return -1;
}
}
return buffer[begin++];
}
int _readchar(void)
{
if (eof)
return -1;
if (begin == end)
{
end = read(buffer, bufferLength);
begin = 0;
if (end == 0)
{
eof = true;
return -1;
}
}
return buffer[begin];
}
int _scanf(const char* format, va_list args)
{
int res = 0;
while (*format)
{
if (*format == ' ' || *format == '\t' || *format == '\n' || *format == '\v' || *format == '\f' || *format == '\r')
{
while (true)
{
int c = _readchar();
if (c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r')
_getchar();
else
break;
}
}
else if (*format != '%')
{
int c = _readchar();
if (c != *format)
break;
_getchar();
}
else
{
++format;
void* p = nullptr;
if (*format == '*')
++format;
else
p = va_arg(args, void*);
unsigned int width = 0;
if ('0' <= *format && *format <= '9')
{
while ('0' <= *format && *format <= '9')
{
width = width * 10 + (*format ^ '0');
++format;
}
}
unsigned int modifier = 2;
if (*format == 'h')
{
++format;
if (*format == 'h')
{
++format;
modifier = 0;
}
else
modifier = 1;
}
else if (*format == 'l')
{
++format;
if (*format == 'l')
{
++format;
modifier = 4;
}
else
modifier = 3;
}
else if (*format == 'L')
{
++format;
modifier = 4;
}
if (*format == '%')
{
int c = _readchar();
if (c != '%')
break;
--res;
_getchar();
}
else if (*format == 'c')
{
if (width == 0)
{
int c = _getchar();
if (c == -1)
break;
if (p)
*(char*)p = c;
}
else
{
for (unsigned int i = 0; i < width; ++i)
{
int c = _getchar();
if (c == -1)
break;
if (p)
((char*)p)[i] = c;
}
}
}
else if (*format == '[')
{
// Not implemented yet
}
else if (*format == 'n')
{
// Not implemented yet
}
else
{
while (true)
{
int c = _readchar();
if (c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r')
_getchar();
else
break;
}
if (*format == 'd' || *format == 'i' || *format == 'u' || *format == 'x' || *format == 'X' || *format == 'o')
{
int base;
int l1, r1, l2, r2;
if (*format == 'd' || *format == 'i' || *format == 'u')
{
base = 10;
l1 = '0';
r1 = '9';
l2 = 0;
r2 = -1;
}
else if (*format == 'x' || *format == 'X')
{
base = 16;
l1 = '0';
r1 = '9';
l2 = *format == 'X' ? 'A' : 'a';
r2 = *format == 'X' ? 'F' : 'f';
}
else
{
base = 8;
l1 = '0';
r1 = '7';
l2 = 0;
r2 = -1;
}
if (modifier == 0)
{
char value = 0;
bool negative = false, success = false;
int c = _readchar();
if (width == 0)
width = -1;
if (c == '-')
{
negative = true;
_getchar();
c = _readchar();
--width;
}
else if (c == '+')
{
_getchar();
c = _readchar();
--width;
}
while (width != 0 && (l1 <= c && c <= r1 || l2 <= c && c <= r2))
{
success = true;
value *= base;
if (l1 <= c && c <= r1)
value += c - l1;
else
value += c - l2 + 10;
_getchar();
--width;
c = _readchar();
}
if (!success)
break;
if (negative)
value = -value;
if (p)
*(char*)p = value;
}
if (modifier == 1)
{
short value = 0;
bool negative = false, success = false;
int c = _readchar();
if (width == 0)
width = -1;
if (c == '-')
{
negative = true;
_getchar();
c = _readchar();
--width;
}
else if (c == '+')
{
_getchar();
c = _readchar();
--width;
}
while (width != 0 && (l1 <= c && c <= r1 || l2 <= c && c <= r2))
{
success = true;
value *= base;
if (l1 <= c && c <= r1)
value += c - l1;
else
value += c - l2 + 10;
_getchar();
--width;
c = _readchar();
}
if (!success)
break;
if (negative)
value = -value;
if (p)
*(short*)p = value;
}
if (modifier == 2)
{
int value = 0;
bool negative = false, success = false;
int c = _readchar();
if (width == 0)
width = -1;
if (c == '-')
{
negative = true;
_getchar();
c = _readchar();
--width;
}
else if (c == '+')
{
_getchar();
c = _readchar();
--width;
}
while (width != 0 && (l1 <= c && c <= r1 || l2 <= c && c <= r2))
{
success = true;
value *= base;
if (l1 <= c && c <= r1)
value += c - l1;
else
value += c - l2 + 10;
_getchar();
--width;
c = _readchar();
}
if (!success)
break;
if (negative)
value = -value;
if (p)
*(int*)p = value;
}
if (modifier == 3)
{
long value = 0;
bool negative = false, success = false;
int c = _readchar();
if (width == 0)
width = -1;
if (c == '-')
{
negative = true;
_getchar();
c = _readchar();
--width;
}
else if (c == '+')
{
_getchar();
c = _readchar();
--width;
}
while (width != 0 && (l1 <= c && c <= r1 || l2 <= c && c <= r2))
{
success = true;
value *= base;
if (l1 <= c && c <= r1)
value += c - l1;
else
value += c - l2 + 10;
_getchar();
--width;
c = _readchar();
}
if (!success)
break;
if (negative)
value = -value;
if (p)
*(long*)p = value;
}
if (modifier == 4)
{
long long value = 0;
bool negative = false, success = false;
int c = _readchar();
if (width == 0)
width = -1;
if (c == '-')
{
negative = true;
_getchar();
c = _readchar();
--width;
}
else if (c == '+')
{
_getchar();
c = _readchar();
--width;
}
while (width != 0 && (l1 <= c && c <= r1 || l2 <= c && c <= r2))
{
success = true;
value *= base;
if (l1 <= c && c <= r1)
value += c - l1;
else
value += c - l2 + 10;
_getchar();
--width;
c = _readchar();
}
if (!success)
break;
if (negative)
value = -value;
if (p)
*(long long*)p = value;
}
}
else if (*format == 's')
{
unsigned int len = 0;
while (true)
{
int c = _readchar();
if (c == -1 || c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r')
break;
_getchar();
if (p)
((char*)p)[len++] = c;
else
++len;
if (len == width)
break;
}
if (p)
((char*)p)[len] = 0;
if (len == 0)
break;
}
}
++res;
}
++format;
}
va_end(args);
if (res == 0 && eof)
return -1;
return res;
}
public:
scanner(unsigned int (*read)(char*, unsigned int)) : read(read), begin(0), end(0), eof(false) {}
int getchar(void)
{
return _getchar();
}
char* gets(char* s, unsigned int maxlen)
{
char* res = s, * r = s + maxlen - 1;
while (true)
{
if (s == r)
{
*s = 0;
break;
}
int c = _getchar();
if (c == -1)
{
*s = 0;
break;
}
if (c == '\n')
{
*s = '\n';
*(++s) = 0;
break;
}
}
if (res == s)
return nullptr;
return res;
}
int scanf(const char* format, ...)
{
va_list args;
va_start(args, format);
return _scanf(format, args);
}
int operator()(const char* format, ...)
{
va_list args;
va_start(args, format);
return _scanf(format, args);
}
};
scanner<> sc([](char* buffer, unsigned int length) { return (unsigned int)(fread(buffer, 1, length, stdin)); });
#define scanf sc
const int mod = 998244353;
class modInt
{
public:
int value;
modInt(void) : value(0) {}
modInt(int v) : value(v) {}
modInt& operator+=(const modInt& other) { return (value += other.value) >= mod ? value -= mod, *this : *this; }
modInt operator+(const modInt& other) const { return modInt(value + other.value >= mod ? value + other.value - mod : value + other.value); }
modInt& operator-=(const modInt& other) { return (value -= other.value) < 0 ? value += mod, *this : *this; }
modInt operator-(const modInt& other) const { return modInt(value < other.value ? value - other.value + mod : value - other.value); }
modInt& operator*=(const modInt& other) { return value = value * (long long)(other.value) % mod, *this; }
modInt operator*(const modInt& other) const { return modInt(value * (long long)(other.value) % mod); }
};
int n, m, q, t[300005];
std::vector<int> rg[300005];
void dfs(int u, int c)
{
if (t[u])
return;
t[u] = c;
for (int v : rg[u])
dfs(v, c);
}
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1, u, v; i <= m; ++i)
{
scanf("%d%d", &u, &v);
rg[v].push_back(u);
}
scanf("%d", &q);
for (int i = 1, opt, x; i <= q; ++i)
{
scanf("%d%d", &opt, &x);
if (opt == 1)
dfs(x, i);
else
puts(t[x] == 0 ? "No" : "Yes");
}
return 0;
}
Submission Info
Submission Time
2025-12-06 21:11:28+0900
Task
D - Reachability Query 2
User
XiangXunyi
Language
C++23 (GCC 15.2.0)
Score
425
Code Size
10805 Byte
Status
AC
Exec Time
114 ms
Memory
28712 KiB
Compile Error
./Main.cpp: In instantiation of 'int scanner<bufferLength>::_scanf(const char*, __va_list_tag*) [with unsigned int bufferLength = 1048576]':
./Main.cpp:462:10: required from 'int scanner<bufferLength>::operator()(const char*, ...) [with unsigned int bufferLength = 1048576]'
462 | return _scanf(format, args);
| ^~~~~~
./Main.cpp:494:7: required from here
494 | scanf("%d%d", &n, &m);
| ^
./Main.cpp:212:87: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
212 | while (width != 0 && (l1 <= c && c <= r1 || l2 <= c && c <= r2))
| ~~~~~~~~^~~~~~~~~~
./Main.cpp:251:87: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
251 | while (width != 0 && (l1 <= c && c <= r1 || l2 <= c && c <= r2))
| ~~~~~~~~^~~~~~~~~~
./Main.cpp:290:87: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
290 | while (width != 0 && (l1 <= c && c <= r1 || l2 <= c && c <= r2))
| ~~~~~~~~^~~~~~~~~~
./Main.cpp:329:87: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
329 | while (width != 0 && (l1 <= c && c <= r1 || l2 <= c && c <= r2))
| ~~~~~~~~^~~~~~~~~~
./Main.cpp:368:87: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
368 | while (width != 0 && (l1 <= c && c <= r1 || l2 <= c && c <= r2))
| ~~~~~~~~^~~~~~~~~~
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
425 / 425
Status
Set Name
Test Cases
Sample
sample_01.txt
All
min.txt, random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, random_21.txt, random_22.txt, random_23.txt, random_24.txt, random_25.txt, random_26.txt, random_27.txt, random_28.txt, sample_01.txt
Case Name
Status
Exec Time
Memory
min.txt
AC
3 ms
3380 KiB
random_01.txt
AC
68 ms
18600 KiB
random_02.txt
AC
68 ms
18668 KiB
random_03.txt
AC
34 ms
9000 KiB
random_04.txt
AC
46 ms
10216 KiB
random_05.txt
AC
14 ms
4768 KiB
random_06.txt
AC
12 ms
4580 KiB
random_07.txt
AC
21 ms
5992 KiB
random_08.txt
AC
68 ms
16524 KiB
random_09.txt
AC
18 ms
5360 KiB
random_10.txt
AC
19 ms
5600 KiB
random_11.txt
AC
40 ms
9064 KiB
random_12.txt
AC
78 ms
17512 KiB
random_13.txt
AC
16 ms
5736 KiB
random_14.txt
AC
15 ms
5232 KiB
random_15.txt
AC
41 ms
10864 KiB
random_16.txt
AC
49 ms
11520 KiB
random_17.txt
AC
30 ms
6876 KiB
random_18.txt
AC
62 ms
22184 KiB
random_19.txt
AC
13 ms
4744 KiB
random_20.txt
AC
17 ms
5280 KiB
random_21.txt
AC
66 ms
17448 KiB
random_22.txt
AC
66 ms
22184 KiB
random_23.txt
AC
33 ms
10144 KiB
random_24.txt
AC
63 ms
22176 KiB
random_25.txt
AC
114 ms
28712 KiB
random_26.txt
AC
112 ms
27680 KiB
random_27.txt
AC
83 ms
22248 KiB
random_28.txt
AC
31 ms
6704 KiB
sample_01.txt
AC
2 ms
3428 KiB