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
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
AC × 1
AC × 30
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