首先有一个暴力的做法,将任意两个点判断,可以得到与之相关的1或3只变色龙:1只是两只变色龙相互喜欢,那么剩下那只就是颜色相同;3只从3只选2只并和自己判断一次,结果为1的那次剩下的那个就是他喜欢的,然后将所有喜欢关系删掉后剩下的就是颜色相同
但这样一开始需要$o(n^2)$次的判断,考虑优化,如果将点划分成若干个集合,每一个集合内部没有特殊关系就可行了,然后就可以再集合中二分来查找了,那么直接对前i-1个点构成的图染成2种颜色(4种颜色容易超过次数),分别进行二分查找即可,次数是$o(nlogn)$的,常数要注意(4种颜色的要注意要取编号最小的颜色,不然会被卡)

 1 #include "chameleon.h"
2 #include <bits/stdc++.h>
3 using namespace std;
4 #define N 1005
5 vector<int>v,p[11],vec[N];
6 int vis[N],to[N],ans[N][2];
7 bool pd(vector<int> &k,int l,int r,int x){
8 p[4].clear();
9 p[4].push_back(x);
10 for(int i=l;i<=r;i++)p[4].push_back(k[i]);
11 return Query(p[4])<p[4].size();
12 }
13 void find(vector<int> &a,int l,int r,int i){
14 int rr=r;
15 while (1){
16 r=rr;
17 if ((vec[i].size()==3)||(!pd(a,l,r,i)))return;
18 while (l<r){
19 int mid=(l+r>>1);
20 if (pd(a,l,mid,i))r=mid;
21 else l=mid+1;
22 }
23 vec[i].push_back(a[l]);
24 vec[a[l]].push_back(i);
25 l++;
26 }
27 }
28 void Solve(int n){
29 n*=2;
30 for(int i=1;i<=n;i++){
31 int flag=4;
32 for(int j=0;j<4;j++)
33 if ((vec[i].size()==3)||(!pd(p[j],0,p[j].size()-1,i)))flag=min(flag,j);
34 else find(p[j],0,p[j].size()-1,i);
35 p[flag].push_back(i);
36 }
37 int t=0;
38 for(int i=1;i<=n;i++){
39 if (vec[i].size()<3)continue;
40 vis[i]=1;
41 for(int j=0;j<2;j++)
42 for(int k=j+1;k<3;k++){
43 v.clear();
44 v.push_back(i);
45 v.push_back(vec[i][j]);
46 v.push_back(vec[i][k]);
47 if (Query(v)==1){
48 to[i]=vec[i][3-j-k];
49 j=k=3;
50 }
51 }
52 if (!to[i])to[i]=vec[i][0];
53 }
54 for(int i=1;i<=n;i++)
55 if (vis[i]){
56 for(int j=0;j<3;j++)
57 if (vec[i][j]==to[i])vec[i][j]=0;
58 for(int j=0;j<3;j++)
59 if (vec[to[i]][j]==i)vec[to[i]][j]=0;
60 }
61 for(int i=1;i<=n;i++)
62 if (vis[i])
63 for(int j=0;j<3;j++)
64 if ((vec[i][j])&&(vec[i][j]<i)&&(vec[vec[i][j]].size()==3)){
65 ans[++t][0]=i;
66 ans[t][1]=vec[i][j];
67 }
68 for(int i=1;i<=n;i++)
69 if (vec[i].size()==1){
70 if ((vec[vec[i][0]].size()==1)&&(i>vec[i][0]))continue;
71 ans[++t][0]=i;
72 ans[t][1]=vec[i][0];
73 }
74 for(int i=1;i<=n/2;i++)Answer(ans[i][0],ans[i][1]);
75 }

[loj3274]变色龙之恋的更多相关文章

  1. JOISC2020 题解

    Day1T1 建筑装饰4 题目链接:Day1T1 建筑装饰4 Solution 我们先考虑朴素的\(dp\)方法: 设\(dp_{i,j,k}\)表示前\(i\)个数中,选了\(j\)个\(B\)数组 ...

  2. HP 820 G2变色龙安装10.11.6基本完美

    初始状态: 一块ssd硬盘,MBR格式分区,安装了WIN7 64位. 不想动win系统,因此就安装在硬盘的扩展分区 电脑配置: cpu: i7-5600u 声卡: ALC280 显卡: HD55 ...

  3. 变色龙安装程序 Chameleon Install 2.2 svn 2281发布

    变色龙安装程序 Chameleon Install 2.2 svn 2281发布 1.更好的支持10.9 Mavericks2.更新ATi.nVidia显卡支持列表3.添加新的 CPU Model I ...

  4. iATKOS v7硬盘安装教程(硬盘助手+变色龙安装版)

    这是作者:Tong 写的一篇安装教程 首先感谢:wowpc制作的变色龙安装版.iATKOS作者以及硬盘安装助手作者 前言:现在时代在进步,系统同样也在进步,在以前要在PC上整个Mac是很痛苦的事情,就 ...

  5. EasyBCD 2.2中文版安装变色龙wowpc.iso详细教程(适用各个版本)

    第一章 安装变色龙引导本章节提供3种安装方案,请自行选择 1.使用 Windows 版变色龙安装器安装适用引导方案:BIOS+MBR第1步:下载 Chameleon Install 2.2svn228 ...

  6. 纯windows下制作变色龙引导安装U盘教程

    原创教程:纯windows下制作变色龙引导安装U盘教程 支持Mavericks和Yosemite 支持白苹果 目标:windows下制作带 Chamelon变色龙引导的黑苹果安装U盘,支持PC机引导安 ...

  7. bzoj 3435: [Wc2014]紫荆花之恋 替罪羊树维护点分治 && AC400

    3435: [Wc2014]紫荆花之恋 Time Limit: 240 Sec  Memory Limit: 512 MBSubmit: 159  Solved: 40[Submit][Status] ...

  8. 轻奢当道业绩逆势增长 Kate Spade联手韩国衣恋开拓中国市场_商场报道_中国时尚品牌网

    轻奢当道业绩逆势增长 Kate Spade联手韩国衣恋开拓中国市场_商场报道_中国时尚品牌网 轻奢当道业绩逆势增长 Kate Spade联手韩国衣恋开拓中国市场

  9. Java之恋

    初次见面那是一个河北的夏天风随沙散落天涯蝴蝶依旧恋着花回首走过的日子手指和键盘之间的梦想之光已恍如昨日 那年我还是一个刚踏进这个曾经只在地理课本上狂念南稻北麦,南油北花的土地那年你只是我必须要学的编程 ...

随机推荐

  1. 洛谷4606 SDOI2018战略游戏(圆方树+虚树)

    QWQ深受其害 当时在现场是真的绝望...... 现在再重新来看这个题 QWQ 根据题目所说,我们可以发现,对于每一个集合中的节点,我们实际上就是要求两两路径上的割点的数目 考虑到又是关于点双的题目, ...

  2. Java(2)详解注释&关键字&常量&变量&标识符

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201497.html 博客主页:https://www.cnblogs.com/testero ...

  3. 用css写三角形

    html部分 <div class="triangle></div> css部分 .triangle{ width:0; height:0; overflow:hid ...

  4. 【UE4】GAMES101 图形学作业0:矩阵初识

    作业描述 给定一个点P=(2,1), 将该点绕原点先逆时针旋转45◦,再平移(1,2), 计算出变换后点的坐标(要求用齐次坐标进行计算). UE4 知识点 主要矩阵 FMatrix FBasisVec ...

  5. AIApe问答机器人Scrum Meeting 4.25

    Scrum Meeting 2 日期:2021年4月25日 会议主要内容概述:前后端针对WebAPI进行协调与统一工作,商量接下来两日计划:敲定部分设计细节. 一.进度情况 组员 负责 两日内已完成的 ...

  6. python基础语法--字典的遍历

    原文链接:https://blog.csdn.net/normang/article/details/55804231 (1)遍历key值 >>> a {'a': '1', 'b': ...

  7. 矩阵n次幂的计算

    1.归纳法 两大数学归纳法 题目一 2.递推关系 题目一 题目二 3.方阵 题目一 4.矩阵对角化(重点) 题目一 题目二 题目三 题目四 5.矩阵性质(综合) 题目一 题目二 对于副对角线: 题目三

  8. 《手把手教你》系列技巧篇(三十五)-java+ selenium自动化测试-单选和多选按钮操作-下篇(详解教程)

    1.简介 今天这一篇宏哥主要是讲解一下,如何使用list容器来遍历多选按钮.大致两部分内容:一部分是宏哥在本地弄的一个小demo,另一部分,宏哥是利用JQueryUI网站里的多选按钮进行实战. 2.d ...

  9. linux hostid与lmhostid

    https://wangchujiang.com/linux-command/c/hostid.html hostid(host identifier) 显示当前主机的十六进制数字标识. 概要 hos ...

  10. hdu 2189 来生一起走(DP)

    题意: 有N个志愿者.指挥部需要将他们分成若干组,但要求每个组的人数必须为素数.问不同的方案总共有多少.(N个志愿者无差别,即每个组的惟一标识是:人数) 思路: 假设N个人可分为K组,将这K组的人数从 ...