http://www.hzxjhs.com:83/contest/493/problem/3

【题目大意】

给定一个有n(n<=500000)个点,m(1<=500000)条边的无向图。给Q(1<=500000)个询问ui和vi,问ui和vi之间是否存在一条不经过重复点的路径,使得经过的点数为偶数。

【题目解析】

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cctype> using namespace std; #define re(i,a,b) for(i=(a);i<=(b);i++)
#define red(i,a,b) for(i=(a);i>=(b);i--) #define SF scanf
#define PF printf
#define mmst(a,v) memset(a,v,sizeof(a)) int gint()
{
int res=;bool neg=;char z;
for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
if(z==EOF)return ;
if(z=='-'){neg=;z=getchar();}
for(;z!=EOF && isdigit(z);res=res*+z-'',z=getchar());
return (neg)?-res:res;
} const int maxn=; int n,m,Q;
int now,info[maxn+];
struct Tedge{int v,next;}edge[*maxn+];
int treeedge[*maxn+]; void addedge(int u,int v){now++;edge[now].v=v;edge[now].next=info[u];info[u]=now;} int dep[maxn+],jump[maxn+][];
int odd[maxn+],f[maxn+]; void dfs(int u)
{
int i,j,v;
for(i=info[u],v=edge[i].v;i!=-;i=edge[i].next,v=edge[i].v)
if(!dep[v])
{
dep[v]=dep[u]+;
jump[v][]=u;
re(j,,)jump[v][j]=jump[jump[v][j-]][j-];
treeedge[i]=treeedge[i^]=;
dfs(v);
odd[u]+=odd[v];
}
else
if(!treeedge[i] && dep[u]>dep[v] && (dep[u]-dep[v])%==)
{
odd[u]++;
odd[v]--;
}
} void dfs2(int u)
{
int i,v;
f[u]=f[jump[u][]]+odd[u];
for(i=info[u],v=edge[i].v;i!=-;i=edge[i].next,v=edge[i].v)if(treeedge[i] && dep[v]>dep[u])dfs2(v);
} void swim(int &x,int H){int i;for(i=;H!=;H>>=,i++)if(H&)x=jump[x][i];}
int ask_lca(int x,int y)
{
if(dep[x]<dep[y])swap(x,y);
swim(x,dep[x]-dep[y]);
if(x==y)return x;
int j;
red(j,,)if(jump[x][j]!=jump[y][j])x=jump[x][j],y=jump[y][j];
return jump[x][];
} int main()
{
freopen("travel.in","r",stdin);
freopen("travel.out","w",stdout);
int i,j;
n=gint();m=gint();Q=gint();
now=-;mmst(info,-);
re(i,,m)
{
int x=gint(),y=gint();
addedge(x,y);addedge(y,x);
}
dep[]=;
re(j,,)jump[][j]=;
dfs();
re(i,,n)if(odd[i])odd[i]=;
dfs2();
while(Q--)
{
int x=gint(),y=gint();
int lca=ask_lca(x,y);
if((dep[x]-dep[lca]+dep[y]-dep[lca])%== || f[x]-f[lca]>= || f[y]-f[lca]>=)PF("TAK\n");else PF("NIE\n");
}
return ;
}

XJOI——NOIP2015提高组模拟题19-day1——观光旅行的更多相关文章

  1. 11.5NOIP2018提高组模拟题

    书信(letter) Description 有 n 个小朋友, 编号为 1 到 n, 他们每人写了一封信, 放到了一个信箱里, 接下来每个人从中抽取一封书信. 显然, 这样一共有 n!种拿到书信的情 ...

  2. NOIP2018提高组模拟题(五)

    字符串(string) Description 小林与亮亮正在做一个游戏.小林随意地写出一个字符串,字符串只由大写 字母组成,然后指定一个非负整数 m,亮亮可以进行至多 m 次操作,每次操作 为交换相 ...

  3. 2019.6.21 NOIP2018提高组模拟题(二)

    1.咒语 (curse.pas/c/cpp) [题目描述] 亮亮梦到自己来到了魔法城堡,但一扇巨大的石门阻拦了他通向城堡内的路.正当他沮丧之际,突然发现门上有一处机关,机关上有一张很长的纸条.亮亮拿起 ...

  4. NOIP2018提高组模拟题(四)

    能量(energy) Description ​ 有一块能量田,它的形状是 n*m的矩形,每一个格子上都有一个能量值 a[x][y] (可正可负).一块矩形田的能量定义为它的每个格子的能量值之和. ​ ...

  5. NOIP2018提高组模拟题(六)

    购物(shop) Description 小林来到商店中进行购物.商店里一共有 n 件物品,第 i 件物品的价格为 a[i] 元.小林总共需要购买 m 件物品,他希望他所花费的钱最少,请你计算出最小 ...

  6. 10.18 NOIP2018提高组模拟题(二)

    大水题 1.咒语 (curse.pas/c/cpp) [题目描述] 亮亮梦到自己来到了魔法城堡,但一扇巨大的石门阻拦了他通向城堡内的路.正当他沮丧之际,突然发现门上有一处机关,机关上有一张很长的纸条. ...

  7. NOIP2018提高组模拟题(二)

    咒语(curse) Description 亮亮梦到自己来到了魔法城堡,但一扇巨大的石门阻拦了他通向城堡内的路. 正当他沮丧之际,突然发现门上有一处机关,机关上有一张很长的纸条. 亮亮拿起纸条的一端, ...

  8. 刷题总结——子串(NOIP2015提高组)

    题目: 题目背景 NOIP2015 提高组 Day2 T2 题目描述 有两个仅包含小写英文字母的字符串 A 和 B .现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在 ...

  9. 【题解】NOIP2015提高组 复赛

    [题解]NOIP2015提高组 复赛 传送门: 神奇的幻方 \([P2615]\) 信息传递 \([P2661]\) 斗地主 \([P2668]\) 跳石头 \([P2678]\) 子串 \([P26 ...

随机推荐

  1. [Flux] Component / Views

    The application will dislay a some catalogs, and each catalog has title image, description. Catalog: ...

  2. [转] [翻译]图解boost::bind

    http://kelvinh.github.io/blog/2013/12/03/boost-bind-illustrated/ 其实这是很久之前留的一个坑了,一直没有填.. 记得在刚开始看到 boo ...

  3. [转] JavaScript中的字符串操作

    一.概述    字符串在JavaScript中几乎无处不在,在你处理用户的输入数据的时候,在读取或设置DOM对象的属性时,在操作cookie时,当然还有更 多....JavaScript的核心部分提供 ...

  4. Java基础知识强化之集合框架笔记13:Collection集合存储学生对象并遍历

    1. Collection集合存储学生对象并遍历: 需求:存储自定义对象并遍历Student(name,age) 分析: (1)创建学生类 (2)创建集合对象 (3)创建学生对象 (4)把学生对象添加 ...

  5. android - INSTALL_FAILED_MEDIA_UNAVAILABLE

    解决方案是将'AndroidManifest.xml'设置 'installLocation'的属性为'auto'即可.

  6. 【OpenSSL】创建证书

    [-] 1生成根证书 1 生成RSA私钥 2 生成证书请求 3 签发自签名证书 2 生成用户证书 1 生成RSA私钥 2 生成证书请求 3 签发证书   1)生成根证书 1.1) 生成RSA私钥 op ...

  7. 局部线性嵌入(LLE)原理总结

    局部线性嵌入(Locally Linear Embedding,以下简称LLE)也是非常重要的降维方法.和传统的PCA,LDA等关注样本方差的降维方法相比,LLE关注于降维时保持样本局部的线性特征,由 ...

  8. Hive学习之五 《Hive进阶—UDF操作案例》 详解

    hive—UDF操作 udf的操作过程: 在HIVE会话中add 自定义函数的jar文件,然后创建function,继而使用函数. 下面就以下面课题为例: 课题:统计每个活动的PV和UV 一.Java ...

  9. 【USACO 1.1.3】黑色星期五

    [问题描述] 13号又是一个星期五.13号在星期五比在其他日子少吗?为了回答这个问题,写一个程序,要求计算每个月的十三号落在周一到周日的次数.给出N年的一个周期,要求计算1900年1月1日至1900+ ...

  10. Firefox中Vimperator插件配置

    具体配置什么,同学们可以网上看下善用佳软关于Vimperator的说明,在这里我列出两条我个人觉得最有用的命令 set nextpattern=\s*下一页|下一张|下一篇|下页|后页\s*,^\bn ...