Submission #1138132

#TimeUsernameProblemLanguageResultExecution timeMemory
1138132raspyRoller Coaster Railroad (IOI16_railroad)C++20
30 / 100
72 ms7376 KiB
#include "railroad.h"
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

struct dsu
{
	vector<int> par;
	int cnt;
	dsu (int sz)
	{
		cnt = sz;
		par = vector<int>(sz);
		for (int i = 0; i < sz; i++)
			par[i]=i;
	}
	int mnz(int x)
	{
		return par[x] = (x == par[x] ? x : mnz(par[x]));
	}
	void zd(int x, int y)
	{
		x=mnz(x);
		y=mnz(y);
		if (x==y)return;
		cnt--;
		par[y]=x;
	}
};

const ll inf = 1e9;

long long plan_roller_coaster(std::vector<int> s, std::vector<int> t) {
	int n = (int)s.size();
	vector<pair<int, int>> a, a1;
	for (int i = 0; i < n; i++)
	{
		a.push_back({s[i], i});
		a1.push_back({t[i], i});
	}
	a.push_back({inf, n});
	a1.push_back({-inf, n});
	sort(a.begin(), a.end());
	sort(a1.begin(), a1.end());
	dsu ins(n);
	for (int i = 0; i < n; i++)
	{
		// cout << ins.cnt << " " << a[i].second << " " << a1[i].second << "\n";
		if (a[i].first < a1[i].first) return 1;
		if (i)
		{
			ins.zd(a[i].second, a1[i].second);
			if (a[i-1].first >= a1[i].first)
				ins.zd(a[i-1].second, a1[i].second);
		}
	}
	// cout << ins.cnt << "\n";
	return (ins.cnt != 1);
}

Compilation message (stderr)

railroad.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
railroad_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...