ぐってぃのプログラミング日記

競技プログラミングやIT関係の記事を書いていくよ

AtCoder Beginner Contest 068 Cat Snuke and a Voyage

考察

1からNを結ぶ点をxとすると、1からxとxからNの辺ができたときにPOSSIBLEになる。
つまりxを明らかにすればいい。

コード

#include <iostream>
#include <algorithm>

#define ll long long
using namespace std;
bool s[200050] = {};
bool t[200050] = {};
int main()
{
	ll n, m;
	cin >> n >> m;

	for (int i = 0; i < m; i++)
	{
		ll a, b;
		cin >> a >> b;

		if (a == 1) {
			t[b] = true;
		}

		if (b == n) {
			s[a] = true;
		}
	}

	for (int i = 0; i < 200050; i++)
	{
		if (s[i] && t[i]) {
			cout << "POSSIBLE" << endl;
			return 0;
		}
	}

	cout << "IMPOSSIBLE" << endl;
	return 0;

}

boolの配列を用いて、両方trueにする発想がなかった。
とても好きな実装の仕方。