【数轴涂色+并查集路径压缩+加速】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 ...
随机推荐
- 使用HttpClient携带pfx证书调用HTTPS协议的WebService
调用第三方服务时,厂商提供了一个WSDL文件.调用的地址和一个后缀为pfx的证书文件,通过SOUPUI记载证书是可以正常调用WebService服务,那么如何将该服务转换为代码呢? 咨询了厂商的支持, ...
- 事件模型的介绍与Button的ActionListener
事件监听: 这是个很重要的概念,也是个很重要的模型,vb,vc都是这样用,甚至后面学的web框架也在用. 现在我们可以做很多按钮了吧,但是我们的按钮按它是没反应的,现在我们来看看怎么样才能让它有 ...
- .NET通过字典给类赋值
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam& ...
- 【Hibernate】对应各种数据库的方言
- JS操作CSS
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- web调用手机相册,并实现动态增加图片功能
注:经测试h5调用相册效果有兼容性问题,安卓仅能调用拍照功能(部分安卓可能会调不起来,所以建议用app原生调用),ios可调起拍照和相册功能. <html xmlns="http:// ...
- iOS :Object-C 语言merge两个字典对象
Object-C 语言merge两个字典对象 - (id)mutableDictionaryCopyIfNeeded:(id)dictObj { if ([dictObj isKindOfClass: ...
- 经典算法mark
在平时找工作的时候,或多或少会遇到一些算法问题,很多都是比较经典或者网上已经流传很久的.只是我们没有接触过,所以不知道怎么解决. 在这儿,我自己总结一些我遇到的一些经典算法,给自己增加一点记忆,也给需 ...
- myslq 5.7 root 默认密码
sudo sumysqld_safe --skip-grant-tables --skip-networking & UPDATE mysql.user SET password=PASSWO ...
- springMVC返回Base64位编码图片验证码
import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;impor ...