题意

题目链接

Sol

说实话这题我到现在都不知道咋A的。

考试的时候是对任意相邻点之间连边,然后一分没有

然后改成每两个之间连一条边就A了。。

按说是可以过掉任意坐标上的点都是偶数的数据啊。。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<iostream>
  4. #include<vector>
  5. #include<cstring>
  6. #include<queue>
  7. #define Pair pair<int, int>
  8. #define MP(x, y) make_pair(x, y)
  9. #define fi first
  10. #define se second
  11. using namespace std;
  12. const int MAXN = 2e5 + 10, INF = 1e9 + 10, mod = 998244353;
  13. inline int read() {
  14. char c = getchar(); int x = 0, f = 1;
  15. while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
  16. while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  17. return x * f;
  18. }
  19. int N;
  20. int x[MAXN], y[MAXN], date[MAXN], numx[MAXN], numy[MAXN];
  21. vector<int> E[MAXN];
  22. vector<Pair> tmp[MAXN];
  23. void Get(int *a) {
  24. for(int i = 1; i <= N; i++) date[i] = a[i];
  25. sort(date + 1, date + N + 1);
  26. int num = unique(date + 1, date + N + 1) - date - 1;
  27. for(int i = 0; i <= num; i++) tmp[i].clear();
  28. for(int i = 1; i <= N; i++) a[i] = lower_bound(date + 1, date + num + 1, a[i]) - date - 1, tmp[a[i]].push_back(MP(a[i], i));
  29. for(int i = 0; i <= num; i++) {
  30. if(tmp[i].size() < 2) continue;
  31. sort(tmp[i].begin(), tmp[i].end());
  32. for(int j = 0; j < tmp[i].size() - 1; j += 2) {
  33. int x = tmp[i][j].se, y = tmp[i][j + 1].se;
  34. E[x].push_back(y);
  35. E[y].push_back(x);
  36. }
  37. }
  38. }
  39. int vis[MAXN], vis2[MAXN];
  40. void BFS(int k) {
  41. queue<int> q;
  42. vis[k] = 1; q.push(k);
  43. while(!q.empty()) {
  44. int p = q.front(); q.pop();
  45. if(vis2[p]) continue; vis2[p] = 1;
  46. for(int i = 0; i < E[p].size(); i++) {
  47. int to = E[p][i];
  48. vis[to] = vis[p] ^ 1;
  49. q.push(to);
  50. }
  51. }
  52. }
  53. int main() {
  54. N = read();
  55. for(int i = 1; i <= N; i++) x[i] = read(), y[i] = read();
  56. Get(x); Get(y);
  57. for(int i = 1; i <= N; i++) if(!vis2[i]) BFS(i);
  58. for(int i = 1; i <= N; i++) putchar(vis[i] == 0 ? 'b' : 'r');
  59. return 0;
  60. }

cf547D. Mike and Fish(欧拉回路)的更多相关文章

  1. CF547D Mike and Fish

    欧拉回路,巧妙的解法. 发现每一个点$(x, y)$实际上是把横坐标和$x$和纵坐标$y$连一条线,然后代进去跑欧拉回路,这样里一条边对应了一个点,我们只要按照欧拉回路间隔染色即可. 注意到原图可能并 ...

  2. CF547D Mike and Fish 建图

    题意: 有点长→CF547DMike and Fish. 分析: 其实也没什么好分析的,我这也是看的题解. (不过,那篇题解好像文字的代码不太对劲) 这里直接说做法,正确性自证: 对输入的,将横.纵坐 ...

  3. 「CF547D」 Mike and Fish

    「CF547D」 Mike and Fish 传送门 介绍三种做法. \(\texttt{Solution 1}\) 上下界网络流 我们将每一行.每一列看成一个点. 两种颜色的数量最多相差 \(1\) ...

  4. CF 547 D. Mike and Fish

    D. Mike and Fish http://codeforces.com/contest/547/problem/D 题意: 给定平面上n个点,将这些点染成红或者蓝色,要求每行.每列红色点与蓝色点 ...

  5. Codeforces 247D Mike and Fish

    Mike and Fish 我们可以把这个模型转换一下就变成有两类点,一类是X轴, 一类是Y轴, 每个点相当于对应的点之间建一条边, 如果这条边变红两点同时+1, 变蓝两点同时-1. 我们能发现这个图 ...

  6. CodeForces - 547D: Mike and Fish (转化为欧拉回路)(优化dfs稠密图)(定向问题)

    As everyone knows, bears love fish. But Mike is a strange bear; He hates fish! The even more strange ...

  7. Codeforces.547D.Mike and Fish(思路 欧拉回路)

    题目链接 \(Description\) 给定平面上n个点,将这些点染成红or蓝色,要求每行.每列红色点与蓝色点数量的差的绝对值<=1.输出方案(保证有解). \(Solution\) 参考这 ...

  8. Codeforces 547D - Mike and Fish(欧拉回路)

    Codeforces 题目传送门 & 洛谷题目传送门 首先考虑将题目中的条件转化为图论的语言.看到"行""列",我们很自然地想到二分图中行.列转点,点转 ...

  9. Codeforces 547D Mike and Fish

    Description 题面 题目大意:有一个的网格图,给出其中的 \(n\) 个点,要你给这些点染蓝色或红色,满足对于每一行每一列都有红蓝数量的绝对值之差不超过1 Solution 首先建立二分图, ...

随机推荐

  1. Httprequest 添加Cookie

    string postData = "Inputs={\"BarCode\":\"" + barCode + "\"}" ...

  2. audio.play dom对象 JQ不支持play

    */        PausePlayVoice:function() {            $("#spPauseAudio").click(function() {     ...

  3. 简单了解树形DP

    今天在B站看了一个树形DP教学视频有所收获,做一个小小的总结 AV号和链接在这:av12194537 那么先介绍一下树形DP 树形DP就是在树这个特殊的数据结构上进行的DP.有两种方向:自顶向下和自底 ...

  4. [洛谷 P4612][COCI 2011-2012#7] Setnja

    传送门 TM :setnja (1S256M) 一个人要散步去会见他的 N 个朋友(按给定的顺序会见).我们可以理解成他们都住在一个 很大的网格内,每个朋友住其中的一个单元格,所有人每一步都可以走到相 ...

  5. WPF Hidden和Collapsed

    对于这两种设定,其实已经提示的很清楚了 Visibility="Hidden"不显示元素,但是在布局为元素保留空间 Visibility="Collapsed" ...

  6. 安卓app上传到应用宝、360手机助手、小米应用商店、百度手机助手/安卓市场/91助手

    1.小米应用商店 小米开放平台网站:https://account.xiaomi.com 注册帐号教程地址:http://dev.xiaomi.com/doc/?p=90 应用提交流程:http:// ...

  7. poj2393tmp

    #include"iostream" #include"stdio.h" #include"algorithm" using namespa ...

  8. List<Type> 随机排序

    public List<T> GetRandomList<T>(List<T> inputList){ //Copy to a array T[] copyArra ...

  9. PIXI 精灵及文本加载(4)

    预习下官网的知识. 及字母消除接上文 Pixi 精灵 Pixi拥有一个精灵类来创建游戏精灵.有三种主要的方法来创建它: 用一个单图像文件创建. 用一个 雪碧图 来创建.雪碧图是一个放入了你游戏所需的所 ...

  10. numpy.reshape使用条件

    np.array中的元素的个数,需要和转换的类型各个维度的乘积相等.如:\(6=2*3=1*2*3\) 另外,可以发现参数的对应关系为shape(num_dims, num_rows, num_col ...