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. Android应用打包安装过程具体解释

    Android应用打包安装过程(Run as Android Application ): 1,过程:Android Project --> Compilation and Packaging ...

  2. 在 Java 中高效使用锁的技巧--转载

    竞争锁是造成多线程应用程序性能瓶颈的主要原因 区分竞争锁和非竞争锁对性能的影响非常重要.如果一个锁自始至终只被一个线程使用,那么 JVM 有能力优化它带来的绝大部分损耗.如果一个锁被多个线程使用过,但 ...

  3. 剪切板 复制文本 ClipboardManager

    代码 public class MainActivity extends ListActivity {     private EditText tv_info;     private Clipbo ...

  4. ListView滑动删除

    本来准备在ListView的每个Item的布局上设置一个隐藏的Button,当滑动的时候显示.但是因为每次只要存在一个Button,发现每个Item上的Button相互间不好控制.所以决定继承List ...

  5. Dedecms调用文章发布时间的方法

    在织梦系统中,有时候需要调用文章发布的时间,格式不同,代码不同.现总结织梦系统dedecms调用文章发布时间的几种方法.   11-20 样式 ([field:pubdate function='st ...

  6. 解决CSS中float:left后需要clear:both清空的繁琐步骤(转)

      之前,因为公司专门有CSS+DIV的切片设计师,所以我一直都是注重程序的设计与开发.现在,因为接了一些Web网站的项目需要制作,就在空闲时间学习起了CSS.Jquery. 现在,大部分的横排导航都 ...

  7. 使用WebUploader使用,及使用后测试横拍或竖拍图片图片方向不对等解决方案

    WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览 ...

  8. 直接拿来用的15个jQuery代码片段

    1.预加载图片 1 2 3 4 5 6 7 8 9 10 11 12 (function($) {   var cache = [];   // Arguments are image paths r ...

  9. 【转】NSString / NSData / char* 类型之间的转换

    原文 :http://www.cnblogs.com/pengyingh/articles/2341880.html NSString 转换成NSData 对象 NSData* xmlData = [ ...

  10. 如何遍历json属性和动态添加属性

    var person= { name: 'zhangsan', pass: '123' , 'sni.ni' : 'sss', hello:function (){ for(var i=0;i< ...