Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- typedef string str;
- typedef long double ld;
- const ll MaxN = 1200;
- #define mp make_pair
- vector <ll> g[MaxN];
- pair <ld, ld> vec[MaxN];
- ll color[MaxN], dfs_timer, time_out[MaxN], time_in[MaxN];
- ll n, m;
- ld eps = 1e-9;
- ld sqr(ld a)
- {
- return a * a;
- }
- bool ccheck(ll a, ll b, ld r)
- {
- return sqrt(sqr(vec[a].first - vec[b].first) + sqr(vec[a].second - vec[b].second)) < 2 * r;
- }
- bool check (ld mm)
- {
- for (int i = 0; i < n; i++)
- color[i] = 0;
- for (int j = 0; j < n; j++)
- if (!color[j])
- {
- color[j] = 1;
- queue <ll> q;
- ll t;
- q.push(j);
- while (!q.empty())
- {
- t = q.front();
- q.pop();
- for (int i = 0; i < n; i++)
- if (i != t && ccheck(i, t, mm))
- if (color[i] == color[t])
- return 0;
- else
- if (!color[i])
- {
- color[i] = 3 - color[t];
- q.push(i);
- }
- }
- }
- return 1;
- }
- int main()
- {
- cin >> n;
- ld x, y;
- for (int i = 0; i < n; i++)
- {
- cin >> x >> y;
- vec[i] = mp(x, y);
- }
- ld l = 0, r = 1e5, mm;
- while (abs(r - l) > eps)
- {
- mm = (l + r) / 2;
- if (check(mm))
- l = mm;
- else
- r = mm;
- }
- check(l);
- cout << setprecision(8) << fixed << l << setprecision(0) << fixed << endl;
- for (int i = 0; i < n; i++)
- cout << color[i] << " ";
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement