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. Spring数据访问2 - 通过JDBC访问数据库

    因为原生的jdbc操作太复杂,几乎都是建立连接.关闭连接和处理例外等模板式的代码,Spring对此进行了抽象——使用模板来消除样板式代码 ,JdbcTemplate承担了简化数据库访问这块的任务. 利 ...

  2. 坑爹的鲁大师,VMware Workstation 报错(AsyncSocket error)一例解决

    今天准备把电脑上安装的VMware Play换成VMware Workstation,毕竟 Workstation 的快照功能还是很有必要的. 结果,VMware Workstation 安装成功后, ...

  3. 直接插入排序法原理及其js实现

    直接插入排序法就像我们打扑克牌时整理牌面一样,先让我们脑补一下我们打牌的过程. 首先摸了一张6, 接着摸到一张4,比6小,插到6的前面: 又摸到一张7,比6大,插到6的后面: 又摸到一张5,比6小,比 ...

  4. JavaScript——XMLHttpRequest 家族

    https://www.zhangxinxu.com/wordpress/2013/10/understand-domstring-document-formdata-blob-file-arrayb ...

  5. swift 与 @objc

    Objective-C entry points https://github.com/apple/swift-evolution/blob/master/proposals/0160-objc-in ...

  6. sh NonUniqueObjectException

    话题引入: 使用hibernate进行更新操作时,首先调用了findById方法获取要修改的对象,此时session没有被关闭,接着重新创建一个对象,将要修改的属性值赋值给这个对象.调用修改方法抛出如 ...

  7. ALTER SCHEMA - 修改一个模式的定义

    SYNOPSIS ALTER SCHEMA name RENAME TO newname DESCRIPTION 描述 ALTER SCHEMA 修改一个模式的定义. 现在它唯一的功能就是重命名模式. ...

  8. 360浏览器 收藏夹 ico 缓存 目录

    C:\Users\Administrator\AppData\Roaming\360se6\apps\data\users\default\data\ico

  9. CAD交互绘制带颜色宽度的直线(com接口)

    用户可以在控件视区任意位置绘制直线. 主要用到函数说明: _DMxDrawX::DrawLine 绘制一个直线.详细说明如下: 参数 说明 DOUBLE dX1 直线的开始点x坐标 DOUBLE dY ...

  10. idea文件全部变红, 文件全部红色

    idea如果当前project用了版本控制器,其下面新建的所有的项目默认都是加入到版本控制里面,所以项目名称和文件都是红色的,如图: 看起来非常不爽, 那么如何解决呢? File–>Settin ...