XJOI网上同步测试DAY14 T1
思路:线段树维护最短路
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
struct node{
int l,r,c[][];
}t[];
int id[][];
int s[][];
int fa[],n;
int read(){
int t=,f=;char ch=getchar();
while (ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while (''<=ch&&ch<=''){t=t*+ch-'';ch=getchar();}
return t*f;
}
int find(int x){
if (fa[x]==x) return x;
else return fa[x]=find(fa[x]);
}
node operator +(node a,node b){
node p;
p.l=std::min(a.l,b.l);
p.r=std::max(a.r,b.r);
p.c[][]=p.c[][]=p.c[][]=p.c[][]=0x3f3f3f3f;
for (int i=;i<=;i++)
if (s[i][a.l]==)
for (int j=;j<=;j++)
if (s[j][b.r]==)
for (int k=;k<=;k++)
if (s[k][a.r]==&&s[k][b.l]==)
p.c[i][j]=std::min(p.c[i][j],a.c[i][k]+b.c[k][j]+); return p;
}
void build(int k,int l,int r){
t[k].c[][]=t[k].c[][]=t[k].c[][]=t[k].c[][]=0x3f3f3f3f;
if (l==r){
t[k].l=t[k].r=l;
if (s[][l]==) t[k].c[][]=;
if (s[][l]==) t[k].c[][]=;
if (s[][l]==&&s[][l]==) t[k].c[][]=t[k].c[][]=;
return;
}
int mid=(l+r)>>;
build(k*,l,mid);
build(k*+,mid+,r);
t[k]=t[k*]+t[k*+];
}
void init(){
char S[];
scanf("%s",S+);
for (int i=;i<=n;i++)
s[][i]=S[i]-'';
scanf("%s",S+);
for (int i=;i<=n;i++)
s[][i]=S[i]-'';
int sz=;
for (int i=;i<;i++)
for (int j=;j<=n;j++)
id[i][j]=++sz;
for (int i=;i<=*n;i++) fa[i]=i;
for (int i=;i<n;i++)
if (s[][i]==&&s[][i+]==) fa[find(id[][i])]=find(id[][i+]);
for (int i=;i<n;i++)
if (s[][i]==&&s[][i+]==) fa[find(id[][i])]=find(id[][i+]);
for (int i=;i<=n;i++)
if (s[][i]==&&s[][i]==) fa[find(id[][i])]=find(id[][i]); }
node query(int k,int l,int r,int x,int y){
int mid=(l+r)>>;
node tmp;
if (l==x&&r==y) return t[k];
if (y<=mid) return query(k*,l,mid,x,y);
else
if (x>mid) return query(k*+,mid+,r,x,y);
else return query(k*,l,mid,x,mid)+query(k*+,mid+,r,mid+,y);
}
int main(){
int T;
n=read();T=read();
init();
build(,,n);
while (T--){
int x=read(),y=read();
if (x==y) {puts("");continue;}
if (find(x)!=find(y)){puts("You have been confusional!");continue;}
int x1=(x>n)?x-n:x;int y1=(y>n)?y-n:y;
if (x1>y1) std::swap(x,y),std::swap(x1,y1);
node tmp=query(,,n,x1,y1);
int id1,id2;
if (x>n) id1=;else id1=;
if (y>n) id2=;else id2=;
int ans=tmp.c[id1][id2];
if (ans==0x3f3f3f3f) puts("You have been confusional!");
else printf("%d\n",ans);
}
}
XJOI网上同步测试DAY14 T1的更多相关文章
- XJOI网上同步测试DAY14 T3
思路:tarjan把桥找出来,然后缩点,注意这里的缩点是:如果两个点之间的连边不是桥,那么就把他们缩起来,然后用一个lct维护,对于每个询问,如果官道连接的是两个联通块的话,就把他们连起来,否则我们就 ...
- XJOI网上同步测试DAY14 T2
思路:先考虑在D高度的最小圆覆盖,再一层一层往下走时,可以保证圆心与最开始的圆相同的时候答案是最优的. 时间复杂度O(n) 有一个坑点,就是我用了srand(time(NULL))就T了,RP太差了. ...
- XJOI网上同步训练DAY6 T1
思路:考试的时候直接想出来了,又有点担心复杂度,不过还是打了,居然是直接A掉,开心啊. 我们发现,Ai<=7,这一定是很重要的条件,我们考虑状态压缩,去枚举路径中出现了哪些数字,然后我们把原来n ...
- XJOI网上同步训练DAY5 T1
思路:考虑得出,最终的集合一定是gcd=1的集合,那么我们枚举n个数中哪个数必须选,然后把它质因数分解,由于质数不会超过9个,可以状态压缩,去得出状态为0的dp值就是答案. #include<c ...
- XJOI网上同步训练DAY3 T1
思路:看来我真是思博了,这么简单的题目居然没想到,而且我对复杂度的判定也有点问题.. 首先我们选了一个位置i的b,那一定只对i和以后的位置造成改变,因此我们可以这样看: 我们从前往后选,发现一个位置的 ...
- XJOI网上同步训练DAY2 T1
[问题描述] 为了迎接校庆月亮中学操场开始施工.不久后操场下发现了很多古墓这些古墓中有很多宝藏.然而学生们逐渐发现自从操场施工之后学校的运气就开始变得特别不好.后来经过调查发现古墓下有一个太守坟由于操 ...
- XJOI网上同步训练DAY1 T1
思路:我们考虑由于没有人的区间会覆盖其他人,所以我们将区间按左端点排序,发现如果地盘长度已知,可以贪心地尽量往左放,来判断是否有解,因此做法很简单,就是二分答案,然后O(n)贪心判定,复杂度为O(nl ...
- XJOI网上同步训练DAY5 T3
就是对于一个数,我们去考虑把t*****减到(t-1)9999*的代价. #include<cstdio> #include<cmath> #include<algori ...
- XJOI网上同步训练DAY6 T2
思路:记得FJ省队集训好像有过这题,可是我太弱了,根本不懂T_T #include<cstdio> #include<iostream> #include<cmath&g ...
随机推荐
- spring-mvc.xml配置文件出错
在整合ssm三大框架的时候,配置spring-mvc.xml的文件的 <mvc:default-servlet-handler/> <mvc:annotation-driven /& ...
- Android 开发经验
学习社区 eoe移动开发者社区 (link) 链接:http://www.eoeandroid.com/ 环境配置 Cocos2d-x 3.x 全平台新手开发配置教程 链接:http://www.co ...
- android:ellipsize的使用
EidtText和textview中内容过长的话自动换行,使用android:ellipsize与android:singleine可以解决,使只有一行. EditText不支持marquee 用法如 ...
- 数据结构 - 求二叉树中结点的最大距离(C++)
// ------BTreeMaxNodeLength.cpp------ #include <iostream> using namespace std; template <cl ...
- TinyXml 快速入门(三)
在<TinyXml 快速入门(二)>介绍使用tinyxml库获取xml文件声明,查询指定节点.删除指定节点的做法.在本文中继续介绍修改指定节点和增加节点的做法. 修改节点其实和查询指定节点 ...
- 异步套接字编程之select模型
█ 选择(select)模型是Winsock中最常见的 I/O模型.核心便是利用 select 函数,实现对 I/O的管理!利用 select 函数来判断某Socket上是否有数据可读,或者能否向 ...
- 《C专家变成》之二
第五章 一.对链接的思考 目标文件并不能直接执行,它首先需要载入到链接器.链接器确认main函数为初始进入点(程序开始执行的地方),把符号引用绑定到内存地址,把所有的目标文件集中在一起,再加上库文件, ...
- 海尔的U+智慧生活操作系统
通过一个手机APP就能操控家庭内的不同品牌的家电家居设备.在连接Wifi的状态下,海尔智能路由器能够自动连接上家庭里的智能冰箱.智能洗衣机.智能空调.智能烤箱.空气盒子等设备端.在智能手机上下载海尔U ...
- js判断访问者是否来自移动端代码
<script type="text/javascript"> function is_mobile() { var regex_match = /(nokia|iph ...
- Java基础知识强化93:算一下你来到这个世界多少天的案例
1. 分析: (1)键盘录入你的出生年月日 (2)把该字符串转换为一个日期 (3)通过该日期得到一个毫秒值 (4)获取当前时间的毫秒值 (5)用(4)-(3)得到一个毫秒值 (6)把E的毫秒值转换为天 ...