http://codeforces.com/contest/828/problem/C

【题意】

【思路】

  • 因为题目保证一定有解,所有优化时间复杂度的关键就是不要重复染色,所以我们可以用并查集维护区间,把确定的点的父亲节点设为下一个点,这样访问过的点的根节点都是没访问过的点。
  • 与上一题是同样的思路,用并查集路径压缩,
  • 要求字典序最小,可以最初给每个字符都赋值'a'
  • 判断字符串最长是多少,最后加'\0'

【Accepted】

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<set>
#include<queue>
using namespace std;
const int N=1e6+;
const int maxn=*N;
const int inf=0x3f3f3f3f;
int fa[maxn];
int n,m;
int a[maxn];
char str[maxn];
char ans[maxn];
int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
} void init()
{
for(int i=;i<maxn;i++){
fa[i]=i;
}
}
int main()
{
while(~scanf("%d",&n))
{
init();
memset(ans,'a',sizeof(ans));
int mmax=-inf;
for(int i=;i<n;i++)
{
scanf("%s%d",str,&m);
int len=strlen(str);
int v=-inf;
for(int k=;k<m;k++)
{
scanf("%d",&a[k]);
v=max(v,a[k]);
}
mmax=max(mmax,v+len);
for(int k=;k<m;k++)
{
int x=a[k];
int y=a[k]+len-;
while((x=find(x))<=y)
{
ans[x]=str[x-a[k]];
fa[x]=x+;
}
}
}
ans[mmax]='\0';
cout<<ans+<<endl; }
return ;
}

或者

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<set>
#include<queue>
using namespace std;
const int N=1e6+;
const int maxn=*N;
const int inf=0x3f3f3f3f;
int fa[maxn];
int n,m;
int a[maxn];
char str[maxn];
char ans[maxn];
int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
} void init()
{
for(int i=;i<maxn;i++){
fa[i]=i;
}
}
int main()
{
while(~scanf("%d",&n))
{
init();
memset(ans,'a',sizeof(ans));
int mmax=-inf;
for(int i=;i<n;i++)
{
scanf("%s%d",str,&m);
int len=strlen(str);
for(int k=;k<m;k++)
{
scanf("%d",&a[k]);
}
mmax=max(mmax,a[m-]+len);
for(int k=;k<m;k++)
{
int x=a[k];
int y=a[k]+len-;
while((y=find(y))!=find(x-))
{
ans[y]=str[y-a[k]];
fa[y]=fa[y-];
}
}
}
ans[mmax]='\0';
cout<<ans+<<endl; }
return ;
}

从右往左或从左往右合并都一样。

一开始在数据8上T了好几回,原来并查集的find一开始没注意没有路径压缩..........

【数轴涂色+并查集路径压缩+加速】C. String Reconstruction的更多相关文章

  1. 并查集+路径压缩(poj1988)

    http://poj.org/problem?id=1988 Cube Stacking Time Limit: 2000MS   Memory Limit: 30000K Total Submiss ...

  2. hdu 1558 线段相交+并查集路径压缩

    Segment set Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. 并查集 + 路径压缩(经典) UVALive 3027 Corporative Network

    Corporative Network Problem's Link Mean: 有n个结点,一开始所有结点都是相互独立的,有两种操作: I u v:把v设为u的父节点,edge(u,v)的距离为ab ...

  4. HDOJ 3635 并查集- 路径压缩,带秩合并

    思路来源:http://blog.csdn.net/niushuai666/article/details/6990421 题目大意: 初始时,有n个龙珠,编号从1到n,分别对应的放在编号从1到n的城 ...

  5. LA 并查集路径压缩

    题目大意:有n个节点,初始时每个节点的父亲节点都不存在.有两种操作 I u v:把点节点u的父亲节点设为v,距离为|u-v|除以1000的余数.输入保证执行指令前u没有父亲节点. E u:询问u到根节 ...

  6. snnu(1110) 传输网络 (并查集+路径压缩+离线操作 || 线段树)

    1110: 传输网络 Time Limit: 3 Sec  Memory Limit: 512 MBSubmit: 43  Solved: 18[Submit][Status][Web Board] ...

  7. - > 并查集+路径压缩(详解)(第一节)

    先举一个友爱的例子解释一下并查集: 话说江湖上散落着各式各样的大侠,有上千个之多. 他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的,就免不了要打一架.但大侠们有一个优点就是讲义 ...

  8. PAT甲级1013题解——并查集+路径压缩

    题目分析: 本题初步浏览题目就知道是并查集的模板题,数据输入范围N为1~1000,则M的范围为0~1000^2,通过结构体记录每一对连线的关系,p[]数组记录每个节点的跟,对于k次查询,每次都要重新维 ...

  9. HDU 3635 并查集+路径压缩+记录每个点移动次数

    题意: 给定n个点 oper个操作 每个点有1个龙珠 下面2种操作: T u v 把u点所有龙珠搬到v Q u  问u点当前所在城市 u点所在城市有几个龙珠 u点被移动几次 思路: 并查集可以求出 u ...

随机推荐

  1. (五)Mybatis总结之一对多、一对一

    一对多 业务场景:张三既是java开发师又是大学老师又是LOL代练,张三拥有多个角色. 1.创建实体类UserInfo和RoleInfo package com.qf.mybatisdemo.pojo ...

  2. ES3之bind方法的实现模拟

    扩展Function原型方法,此处用myBind来模拟bind实现 Function.prototype.myBind = function(o /*,args*/){       //闭包无法获取t ...

  3. android环境搭建环境 cordova run android gradle wrapper报错

    cordova run android命令报错 Error: Could not find an installed version of Gradle either in Android Studi ...

  4. testlink 从1.8.5 升级到 1.9.8

    step1:备份原 1.8.5 的数据库.   step2:分别下载 1.9.0 / 1.9.3 / 1.9.8 的安装包.   step3:分别解压 1.9.0 / 1.9.3 / 1.9.8 成3 ...

  5. Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射 下一篇:Farseer.net轻量级ORM开源 ...

  6. image和TFRecord互相转换

    关说不练假把式.手上正好有车牌字符的数据集,想把他们写成TFRecord格式,然后读进来,构建一个简单的cnn训练看看.然后发现准确率只有0.0x.随机猜也比这要好点吧.只能一步步检查整个过程.暂时想 ...

  7. linux 配置Java、Mysql、Tomcat、Redis开发环境

    1.安装四个依赖 以下四个依赖必须按顺序联网安装:yum install glibc.i686yum -y install libaio.so.1 libgcc_s.so.1 libstdc++.so ...

  8. IIS启用32位应用程序兼容

    针对服务器出现html和jsp页面都可以应用,但唯独asp页面打不开的一种情况 win7的IIS运行在32状态下,原因是ASP程序必须在32位下才能使用ACCESS 设置办法: 打开IIS管理器,点应 ...

  9. windows/linux 更新python pip

    linux环境下 pip install -U pip windows环境下 python -m pip install -U pip python -m pip install --upgrade ...

  10. java 解析json格式数据

    有时候可能会用到json格式进行数据的传输,那么怎么把接收到的数据解析出来呢? 下面介绍两种解析json数据的方法: 1.通过谷歌的Gson来进行解析: json数据:sTotalString = { ...