[POI2005]DWU-Double-row
有2n个士兵站成两排,他们需要被重新排列,以保证每一排里没有同样高的士兵——这样我们就说,士兵们被合理地安排了位置。 每次操作可以交换两个在同一位置(但不在同一排)的士兵。你的任务是用最少的操作来确保士兵们被合理地安排了位置。 例如: 有18个士兵站成两排,箭头标明了重新安排士兵位置的正确方式(图飞了?)。 写一个这样的程序: 读入n与士兵的身高,以及他们最初所站的位置,确保以最小的交换(站在同一位置的不同排的士兵)的次数来合理地安排士兵的位置,输出操作数。
Solution
我最菜了。
听一些dalao说要染色,于是我就有了一些NAIVE的想法,把每一列的两个点之间连一条边,既然每个点的度数最多为2,那么它最后一定是一堆环,我们要么全部正着走,要么都反着走,所以我们对每个联通块都做一遍就可以了。
Code
#include<iostream>
#include<cstdio>
#define N 100002
using namespace std;
int head[N],tot,a[N],b[N],ans,pos[],n,ma;
bool vis[N];
struct edge{
int n,to,tag;
}e[N<<];
inline void add(int u,int v,int tag){
e[++tot].n=head[u];
e[tot].to=v;
e[tot].tag=tag;
head[u]=tot;
}
void dfs(int u,int fa){
vis[u]=;
for(int i=head[u];i;i=e[i].n)if(e[i].to!=fa){
int v=e[i].to;
pos[e[i].tag]++;
if(!vis[v])dfs(v,u);
break;
}
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%d",&a[i]),ma=max(ma,a[i]);
for(int i=;i<=n;++i)scanf("%d",&b[i]),add(a[i],b[i],),add(b[i],a[i],),ma=max(ma,b[i]);
for(int i=;i<=ma;++i)if(!vis[i]){
pos[]=pos[]=;
dfs(i,);
ans+=min(pos[],pos[]); ;
}
cout<<ans;
return ;
}
获得了40pts
emmm
有一个问题就是说有些数会出现一次,因为每个点度数最多为2,不可能是基环树,只能是一条链,那么GG了。
我们把每列看成一个点,如果两列必须一样连0边,否则连1边,染色即可。
真·Code
#include<iostream>
#include<cstdio>
#define N 100002
using namespace std;
int head[N],tot,x,ans,pos[],n,pre[N],co[N];
bool vis[N];
struct edge{
int n,to,tag;
}e[N<<];
inline void add(int u,int v,int tag){
e[++tot].n=head[u];
e[tot].to=v;
e[tot].tag=tag;
head[u]=tot;
}
void dfs(int u,int c){
vis[u]=;pos[c]++;
for(int i=head[u];i;i=e[i].n)if(!vis[e[i].to]){
int v=e[i].to;
dfs(v,c^e[i].tag);
}
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i){
scanf("%d",&x);
if(pre[x]){
add(i,pre[x],);
add(pre[x],i,);
}
else pre[x]=i;
}
for(int i=;i<=n;++i){
scanf("%d",&x);
if(pre[x]){
add(i,pre[x],co[x]);
add(pre[x],i,co[x]);
}
else pre[x]=i,co[x]=;
}
for(int i=;i<=n;++i)if(!vis[i]){
pos[]=pos[]=;
dfs(i,);
ans+=min(pos[],pos[]);
}
cout<<ans;
return ;
}
[POI2005]DWU-Double-row的更多相关文章
- 转载 NPOI.dll 用法。单元格,样式,字体,颜色,行高,宽度。读写excel
我用的版本是1.25的.每个版本用法有一点不同 using System; using System.Collections.Generic; using System.ComponentModel; ...
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)
在OpenCV2:图像的几何变换,平移.镜像.缩放.旋转(1)主要介绍了图像变换中的向前映射.向后映射.处理变换过程中浮点坐标像素值的插值算法,并且基于OpenCV2实现了两个简单的几何变换:平移和镜 ...
- 日志分析_使用shell完整日志分析案例
一.需求分析 1. 日志文件每天生成一份(需要将日志文件定时上传至hdfs) 2. 分析日志文件中包含的字段:访问IP,访问时间,访问URL,访问状态,访问流量 3. 现在有"昨日" ...
- CDH5.4.5运行多字符分割记录
准备工作: 测试文件内容:cis_cust_imp_info 20131131|+|100010001001|+|BR01|+|2000.0120131131|+|100010001002|+|BR0 ...
- C/C++二维数组分配内存
//C++方式 double **Q=new double*[row]; //初始化Q矩阵 for(int i=0;i<row;++i) Q[i]=new double[POS_NUM]( ...
- IplImage, CvMat, Mat 的关系和相互转换(转)
(看到的一篇非常好的文章,讲opencv内部类之间的关系的.) opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,Mat类型侧重 ...
- IplImage, CvMat, Mat 的关系
IplImage, CvMat, Mat 的关系 转载来源:http://www.cnblogs.com/summerRQ/articles/2406109.html opencv中常见的与图像操作有 ...
- Windows Azure Table storage 之 动态Table类 DynamicTableEntity
在一般情况下,当我们在.net中使用Azure table storage的时候都会为该表建立一个TableEntity的派生类,如下所示. public class CustomerEntity : ...
- 使用 Hive 作为 ETL 或 ELT 工具
用来处理数据的 ETL 和 ELT 工具的概述 数据集成和数据管理技术已存在很长一段时间.提取.转换和加载(ETL)数据的工具已经改变了传统的数据库和数据仓库.现在,内存中转换 ETL 工具使得提取. ...
- six month dormancy test
source data: accountleg year_month amount acc1A 2010-01 100 acc1A 2010-02 100 acc1 ...
随机推荐
- centos6.7用yum安装redis解决办法及IP限制配置
在centos6.7用yum安装redis解决办法 - bluesky1 - 博客园 http://www.cnblogs.com/lanblogs/p/6104834.html yum instal ...
- MySQL的SQL语句优化-group by语句的优化
原文:http://bbs.landingbj.com/t-0-243202-1.html 默认情况下,MySQL排序所有GROUP BY col1, col2, ....,查询的方法如同在查询中指定 ...
- oracle创建视图时一些问题
这几天创建视图的时候,遇见的问题. 一:创建视图的时候Oracle-报错:文字与格式字符串不匹配(ORA-01861) 我创建的时候用的 是to_date 然后我改成了to_char select X ...
- Windows 禁止 chrome 自动更新的方法
来源: https://www.cnblogs.com/zhouwanqiu/p/9329134.html 公司进行兼容性测试 需要chrome的浏览器版本, 但是 公司网络抽风 偶尔 总能是升级到最 ...
- git基本操作1
1.创建版本库 在文件夹下,打开Git Bash Here ,然后执行git init,文件夹中会多出.git文件夹.(.git可能是隐藏的) 2.创建a.txt vim a.txt ,并添加到版本 ...
- placeholder解决兼容各种IE浏览器的方法
<input id="search" type="text" class="box" class="inputText&qu ...
- centOS 开机自启动自己的脚本
centOS 开机自启动自己的脚本 1. 自己脚本 myservice 如下: #!/bin/bash # chkconfig: # description: myservice .... echo ...
- onbeforeunload事件两种写法及效果
在符合W3C标准的浏览器里,可以使用addEventListener方法来添加事件. 当不需要为一个事件添加多个处理函数的时候,可以简单的使用onXXX=function(){}的方式来添加事件处理函 ...
- endnote格式
endnote插入参考文献后的对齐方式和缩进空格 听语音 | 浏览:4780 | 更新:2016-11-28 20:46 1 2 3 4 5 6 7 分步阅读 1.endnote 导入到word参考文 ...
- The Xamarin Live Player Unpacked
It is 2017, and it is almost criminal to say that your app doesn't work on a given mobile platform. ...