【数轴涂色+并查集路径压缩+加速】C. String Reconstruction
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的更多相关文章
- 并查集+路径压缩(poj1988)
http://poj.org/problem?id=1988 Cube Stacking Time Limit: 2000MS Memory Limit: 30000K Total Submiss ...
- hdu 1558 线段相交+并查集路径压缩
Segment set Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 并查集 + 路径压缩(经典) UVALive 3027 Corporative Network
Corporative Network Problem's Link Mean: 有n个结点,一开始所有结点都是相互独立的,有两种操作: I u v:把v设为u的父节点,edge(u,v)的距离为ab ...
- HDOJ 3635 并查集- 路径压缩,带秩合并
思路来源:http://blog.csdn.net/niushuai666/article/details/6990421 题目大意: 初始时,有n个龙珠,编号从1到n,分别对应的放在编号从1到n的城 ...
- LA 并查集路径压缩
题目大意:有n个节点,初始时每个节点的父亲节点都不存在.有两种操作 I u v:把点节点u的父亲节点设为v,距离为|u-v|除以1000的余数.输入保证执行指令前u没有父亲节点. E u:询问u到根节 ...
- snnu(1110) 传输网络 (并查集+路径压缩+离线操作 || 线段树)
1110: 传输网络 Time Limit: 3 Sec Memory Limit: 512 MBSubmit: 43 Solved: 18[Submit][Status][Web Board] ...
- - > 并查集+路径压缩(详解)(第一节)
先举一个友爱的例子解释一下并查集: 话说江湖上散落着各式各样的大侠,有上千个之多. 他们没有什么正当职业,整天背着剑在外面走来走去,碰到和自己不是一路人的,就免不了要打一架.但大侠们有一个优点就是讲义 ...
- PAT甲级1013题解——并查集+路径压缩
题目分析: 本题初步浏览题目就知道是并查集的模板题,数据输入范围N为1~1000,则M的范围为0~1000^2,通过结构体记录每一对连线的关系,p[]数组记录每个节点的跟,对于k次查询,每次都要重新维 ...
- HDU 3635 并查集+路径压缩+记录每个点移动次数
题意: 给定n个点 oper个操作 每个点有1个龙珠 下面2种操作: T u v 把u点所有龙珠搬到v Q u 问u点当前所在城市 u点所在城市有几个龙珠 u点被移动几次 思路: 并查集可以求出 u ...
随机推荐
- -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match问题处理
使用MyEclipse运行Maven项目时报如下错误信息: -Dmaven.multiModuleProjectDirectory system property is not set. Check ...
- NDK(18)eclipse 使用C++ STL
1.引用库 在Application.mk 中使用 APP_STL := stlport_static 等. APP_ABI := x86 armeabi APP_PLATFORM := androi ...
- Styles and Themens(1)详述
Styles and Themes IN THIS DOCUMENT Defining Styles Inheritance Style Properties Applying Styles and ...
- 如何用PS快速做出3D按钮效果的图片
1 先建立一个透明图层 2:再创建一个矩形 3:选用过喷样式 4: 双击图层并应用蓝色,记得这里应该复制下颜色的16进制值. 效果如图所示 取消光泽选项,大功告成! 最终效果如图所示,将其保存为PNG ...
- SimpleDateForma类
package Format_daqo; import java.text.SimpleDateFormat; import java.util.Date; public class SimpleDa ...
- 希尔排序法及其js实现
希尔(Shell)排序又称为缩小增量排序,它是一种插入排序.它是直接插入排序算法的加强版. 希尔增量: 希尔增量是指希尔提出了一种冲破二次时间屏障的算法. Donald Shell 提出了一种冲破二次 ...
- mui 时间日期控件(浏览器上无法查看,在手机端可以点击)
<head> <meta charset="utf-8"> <meta name="viewport" content=" ...
- 【译】x86程序员手册37-第10章 初始化
Chapter 10 Initialization 第10章 初始化 After a signal on the RESET pin, certain registers of the 80386 a ...
- 洛谷——P2680 运输计划
https://www.luogu.org/problem/show?pid=2680 题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每 ...
- VS2015 update3 安装 asp.net core 失败
CMD 命令下执行: C:\DotNetCore\DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1