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 ...
随机推荐
- Java程序员可能犯的3个常见SQL错误
概述:Java程序员不仅要具备扎实的Java编程能力,在日常的工作当中往往还要涉及到其他语言的基础知识,尤其是SQL.那么哪些常见的SQL错误是程序员们容易犯的呢?让我们一起来看看吧! 你可能看到Ja ...
- Genymotion模拟器一滑动页面就跳到搜索003
今天郁闷的要死,好不容易让Appium关联起Genymotion了,但是一滑动屏幕就跳转到搜索003界面,当时还以为是Appium的Bug或者Genymotion本身出问题了. 结果网上搜了一段时间( ...
- Android ViewFlow的一个例子
完成这个例子的步骤: 1.下载ViewFlow的源码,然后将类ViewFlow放在自己的工程的src的某个包下. 2.下载的源码里有2个工程view flow,viewflow-example.将vi ...
- 阅读underscore源码笔记
本文为原创作品,可以转载,但请添加本文连接,谢谢传阅,本人博客已转移至github,地址为:jruif.github.io underscorejs,一个实用的的Javascript函数库,值得推荐, ...
- [Angular 2] Get start with Firebase
Create a Firebase Servcie: import {Injectable} from 'angular2/core'; import {Http, Response} from 'a ...
- CVE-2014-0196(马拉松赛跑bug)
/* * CVE-2014-0196: Linux kernel <= v3.15-rc4: raw mode PTY local echo race * condition * * Sligh ...
- 【经典面试题】实现平方根函数sqrt
本文将从一道经典的面试题说起:实现平方根函数,不得调用其它库函数. 函数原型声明例如以下: double Sqrt(double A); 二分法 二分法的概念 求,等价于求方程的非负根(解).求解方程 ...
- 使用MFC读写Excel
_Application m_ExlApp; //组件服务器的各个classes _Workbook m_ExlBook; Workbooks m_ExlBooks; _W ...
- Debian 桌面美化
Debian 桌面美化 安装 gnome-tweak-tool aptitude install gnome-tweak-tool 登陆gnome-look下载主题包 gnome-look上有很多主题 ...
- 【转】prufer编码
既然有人提到了,就顺便学习一下吧,来源:http://greatkongxin.blog.163.com/blog/static/170097125201172483025666/ 一个含有n个点的完 ...