题目链接

https://atcoder.jp/contests/agc005/tasks/agc005_e

题解

完了真的啥都不会了……

首先,显然如果某条A树的边对应B树上的距离大于等于\(3\), 且A能走到该边的某个端点,那么答案就是\(-1\).
A能走到某个点当且仅当从A的起点到这个点的路径上每个点与A起点的距离都小于与B起点的距离。
然后直接在A树上从根开始DFS,如果走不到了就返回,否则用与\(y\)的距离更新答案;同时在遍历每条边的时候判断是否可以\(-1\).
时间复杂度\(O(n\log n)\), 但是由于距离不超过\(3\)的特殊性可以优化成\(O(n)\).

上面的性质我都发现了,可是我做不出来这题……到底是什么情况……

代码

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cassert>
using namespace std;const int N = 2e5;
const int lgN = 18;
const int INF = 1e7;
struct Edge
{int v,nxt;
} e1[(N<<1)+3],e2[(N<<1)+3];
int fe1[N+3],fe2[N+3];
int dep1[N+3],dep2[N+3];
int fa2[N+3][lgN+3];
int n,en1,en2,s1,s2,ans;void addedge1(int u,int v)
{en1++; e1[en1].v = v;e1[en1].nxt = fe1[u]; fe1[u] = en1;
}
void addedge2(int u,int v)
{en2++; e2[en2].v = v;e2[en2].nxt = fe2[u]; fe2[u] = en2;
}void dfs1(int u,int prv)
{for(int i=fe1[u]; i; i=e1[i].nxt){int v = e1[i].v;if(v==prv) continue;dep1[v] = dep1[u]+1;dfs1(v,u);}
}void dfs2(int u)
{for(int i=1; i<=lgN; i++) fa2[u][i] = fa2[fa2[u][i-1]][i-1];for(int i=fe2[u]; i; i=e2[i].nxt){int v = e2[i].v;if(v==fa2[u][0]) continue;fa2[v][0] = u; dep2[v] = dep2[u]+1;dfs2(v);}
}int LCA(int u,int v)
{if(dep2[u]<dep2[v]) swap(u,v);int dif = dep2[u]-dep2[v];for(int i=0; i<=lgN; i++){if(dif&(1<<i)) {u = fa2[u][i];}}if(u==v) return u;for(int i=lgN; i>=0; i--){if(fa2[u][i]!=fa2[v][i]) {u = fa2[u][i],v = fa2[v][i];}}return fa2[u][0];
}void dfs(int u,int fa)
{if(dep1[u]>=dep2[u]) {return;}ans = max(ans,dep2[u]);for(int i=fe1[u]; i; i=e1[i].nxt){int v = e1[i].v;if(v==fa) continue;if(dep2[u]+dep2[v]-2*dep2[LCA(u,v)]>2) {ans = INF; return;}dfs(v,u);}
}int main()
{scanf("%d%d%d",&n,&s1,&s2);for(int i=1; i<n; i++){int u,v; scanf("%d%d",&u,&v);addedge1(u,v); addedge1(v,u);}for(int i=1; i<n; i++){int u,v; scanf("%d%d",&u,&v);addedge2(u,v); addedge2(v,u);}dfs1(s1,0); dfs2(s2);ans = 0; dfs(s1,0);printf("%d\n",ans==INF?-1:ans*2);return 0;
}

AtCoder AGC005E Sugigma: The Showdown (博弈论)相关推荐

  1. 【AtCoder】AGC005

    AGC005 A - STring 用一个栈,如果遇到S就弹入,如果遇到T栈里有S就弹出栈顶,否则T在最后的串里,最后计算出的T和栈里剩的S就是答案 #include <bits/stdc++. ...

  2. Atcoder Grand Contest 005 题解

    A - STring 用一个栈模拟即可. //waz #include <bits/stdc++.h>using namespace std;#define mp make_pair #d ...

  3. AtCoder AGC033C Removing Coins (博弈论)

    题目链接 https://atcoder.jp/contests/agc033/tasks/agc033_c 题解 终于会做点最简单的博弈论了-- 首先题目中操作的含义就是选定一个点,把所有不是这个点 ...

  4. AtCoder AGC002E Candy Piles (博弈论)

    神仙题..表示自己智商不够想不到... 好几次读成最后拿的赢了,导致一直没看懂题解... 题目链接: https://atcoder.jp/contests/agc002/tasks/agc002_e ...

  5. [atcoder caddi2018]D.Harlequin——博弈论

    题目大意: 给定n堆石子,每一次可以从不同的堆中取1个石子或者不取,求最后的谁获胜. 思路: 一种状态E全部都是偶数,另外一种状态O即存在奇数. 不难发现最后的状态为E. 如果拿到了E不论怎么操作都会 ...

  6. 【做题记录】AtCoder AGC做题记录

    做一下AtCoder的AGC锻炼一下思维吧 目前已做题数: 127 总共题数: 269 每一场比赛后面的字母是做完的题,括号里是写完题解的题 AGC001: ABCDEF (DEF) AGC002: ...

  7. AtCoder Grand Contest 010 D - Decrementing

    题目传送门:https://agc010.contest.atcoder.jp/tasks/agc010_d 题目大意: 有\(n\)个数\(A_i\),它们的\(gcd\)是1,A.B两人轮流操作, ...

  8. 开启Atcoder之路

    很久没写博客了,其实是很久没刷题了...一直在忙着考试,总算是松了一口气,虽然考的不怎么样.今天把博弈论巩固了一下,原本准备和学长一起刷TopCoder的,结果邮件问题一直没解决,就先刷AtCoder ...

  9. AtCoder Grand Contest 017 迟到记

    晚上去操场上浪. 回来以后看到好几个人开着 \(AtCoder\) 在打代码. ... ... 今天有 \(AtCoder\) 比赛 ? 管它呢, \(Kito\) 在切西瓜,先吃西瓜... 然后看 ...

最新文章

  1. GitHub托管项目
  2. 韩国防部长会见美驻韩大使 或谈韩日舰机矛盾
  3. 运行初始化过程代码笔记
  4. 六时出行 App 隐私政策
  5. TracKit-Ocean:目标跟踪网络(二) -- 运行问题及解决逻辑设计
  6. c语言程序设计数字电位器,数字电位器X9C103 100级调节电路和单片机源程序
  7. 全国一级计算机考证软件
  8. java毕设_java毕业设计选题?
  9. 个人观点:苹果对iPad商标事件的解决办法
  10. win10微软官网地址
  11. Ps橡皮擦的使用说明
  12. Device disconnected
  13. 思科wlc产品文档_思科认证EI CCIE和SP CCIE 怎么选?零基础入门或是网工深造都建议收藏...
  14. 山下英子与家政学员亲密接触 深度解读断舍离生活美学
  15. Ubuntu1604报错统一解决方法E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)
  16. Atitit 经济学常见的流派 古典主义与凯恩斯主义
  17. Unity之三维空间多点箭头导航
  18. Android可信执行环境TEE最全介绍
  19. unity3D脚本C#的get,set的用法
  20. 关于esp8266的D0、D3、D4口的使用

热门文章

  1. 云炬Android开发笔记 8代码生成器设计与实践(仿ButterKnife注解框架,编译期生成代码)
  2. 云炬Android开发报错处理教程 Gradle下载超时please configure the proxy settings either in IDE or Gradle
  3. 台湾大学林轩田机器学习基石课程学习笔记13 -- Hazard of Overfitting
  4. win10休眠_win10休眠重新开机黑屏进入不了系统
  5. SQL SERVER 跨服务器查询
  6. Asp.net常用优化方法
  7. 28款网页CSS设计工具和生成器
  8. BUUCTF-Reverse:reverse2
  9. BugkuCTF-Misc:想蹭网先解开密码
  10. 二分查找之搜索插入位置