Codeforces Round #482 (Div. 2) C Kuro and Walking Route
2 seconds
256 megabytes
standard input
standard output
Kuro is living in a country called Uberland, consisting of nn towns, numbered from 11 to nn, and n−1n−1 bidirectional roads connecting these towns. It is possible to reach each town from any other. Each road connects two towns aa and bb. Kuro loves walking and he is planning to take a walking marathon, in which he will choose a pair of towns (u,v)(u,v) (u≠vu≠v) and walk from uu using the shortest path to vv (note that (u,v)(u,v) is considered to be different from (v,u)(v,u)).
Oddly, there are 2 special towns in Uberland named Flowrisa (denoted with the index xx) and Beetopia (denoted with the index yy). Flowrisa is a town where there are many strong-scent flowers, and Beetopia is another town where many bees live. In particular, Kuro will avoid any pair of towns (u,v)(u,v) if on the path from uu to vv, he reaches Beetopia after he reached Flowrisa, since the bees will be attracted with the flower smell on Kuro’s body and sting him.
Kuro wants to know how many pair of city (u,v) he can take as his route. Since he’s not really bright, he asked you to help him with this problem.
The first line contains three integers n, x and y (1≤n≤3⋅105,1≤x,y≤n1≤n≤3⋅105,1≤x,y≤n, x≠y) - the number of towns, index of the town Flowrisa and index of the town Beetopia, respectively.
n−1lines follow, each line contains two integers a and b (1≤a,b≤n1≤a,b≤n, a≠b), describes a road connecting two towns a and b.
It is guaranteed that from each town, we can reach every other town in the city using the given roads. That is, the given map of towns and roads is a tree.
A single integer resembles the number of pair of towns (u,v) that Kuro can use as his walking route.
3 1 3
1 2
2 3
5
3 1 3
1 2
1 3
4
On the first example, Kuro can choose these pairs:
- (1,2)(1,2): his route would be 1→2,
- (2,3)(2,3): his route would be 2→3,
- (3,2)(3,2): his route would be 3→2
- (2,1)(2,1): his route would be 2→1,
- (3,1)(3,1): his route would be 3→2→1.
Kuro can't choose pair (1,3)(1,3) since his walking route would be 1→2→31→2→3, in which Kuro visits town 11 (Flowrisa) and then visits town 33(Beetopia), which is not allowed (note that pair (3,1)(3,1) is still allowed because although Kuro visited Flowrisa and Beetopia, he did not visit them in that order).
On the second example, Kuro can choose the following pairs:
- (1,2)(1,2): his route would be 1→2,
- (2,1)(2,1): his route would be 2→1,
- (3,2)(3,2): his route would be 3→1→2,
- (3,1)(3,1): his route would be 3→1.
题意 给出一颗n个定点的树 树上有两个点 想 x,y 任意两点相互可达 但u到v的路径上先经过x再经过y是不允许的 (u,v)和(v , u)是两条不相同的路径
问满足上述条件的路径有多少条
解析
我们选定一个点作为根节点1 size[ i ]表示 以i为根节点的子树大小
若x的祖先没有y y 的祖先没有x 那么答案就是size[x]*size[y]
若x 的祖先有y 那么我们要找x的祖先 且 是y的儿子的那个节点 fa 答案就是(n-size[fa])*size[x]
同理得到另一种情况
AC代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 3e5+ ,mod = ,inf=0x3f3f3f3f;
const double pi=acos(-1.0);
typedef long long ll;
vector<int> g[maxn];
ll siz[maxn],fa[maxn];
ll n,x,y;
int vis[maxn];
void dfs1(int k,int f)
{
vis[k]=;
siz[k]=;
fa[k]=f;
for(int i=;i<g[k].size();i++)
{
int u=g[k][i];
if(vis[u]==&&u!=f)
{
dfs1(u,k);
siz[k]+=siz[u];
}
}
}
int dfs2(int k1,int k2)
{
if(fa[k1]==k2)
return k1;
else if(fa[k1]==)
return ;
else
return dfs2(fa[k1],k2);
}
int main()
{
cin>>n>>x>>y;
for(int i=;i<n-;i++)
{
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
memset(siz,,sizeof(siz));
memset(vis,,sizeof(vis));
dfs1(,);
ll ans;
int f1=dfs2(x,y),f2=dfs2(y,x);
//cout<<f1<<" "<<f2<<endl;
if(f1==f2)
ans=siz[x]*siz[y];
else if(f1==)
ans=(n-siz[f2])*siz[y];
else
ans=(n-siz[f1])*siz[x];
// for(int i=1;i<=n;i++)
// cout<<i<<" "<<fa[i]<<endl;
cout<<n*(n-)-ans<<endl;
}
Codeforces Round #482 (Div. 2) C Kuro and Walking Route的更多相关文章
- Codeforces Round #482 (Div. 2) : Kuro and GCD and XOR and SUM (寻找最大异或值)
题目链接:http://codeforces.com/contest/979/problem/D 参考大神博客:https://www.cnblogs.com/kickit/p/9046953.htm ...
- 【Trie】【枚举约数】Codeforces Round #482 (Div. 2) D. Kuro and GCD and XOR and SUM
题意: 给你一个空的可重集,支持以下操作: 向其中塞进一个数x(不超过100000), 询问(x,K,s):如果K不能整除x,直接输出-1.否则,问你可重集中所有是K的倍数的数之中,小于等于s-x,并 ...
- Codeforces Round #482 (Div. 2) C 、 Kuro and Walking Route(dfs)979C
题目链接:http://codeforces.com/contest/979/problem/C 大致题意 给出n个点,有n-1个边将他们链接.给出x,y,当某一路径中出现x....y时,此路不通.路 ...
- Codeforces Round #482 (Div. 2) :C - Kuro and Walking Route
题目连接:http://codeforces.com/contest/979/problem/C 解题心得: 题意就是给你n个点,在点集中间有n-1条边(无重边),在行走的时候不能从x点走到y点,问你 ...
- 【Codeforces Round #482 (Div. 2) C】Kuro and Walking Route
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 把x..y这条路径上的点标记一下. 然后从x开始dfs,要求不能走到那些标记过的点上.记录节点个数为cnt1(包括x) 然后从y开始 ...
- Codeforces Round #482 (Div. 2) :B - Treasure Hunt
题目链接:http://codeforces.com/contest/979/problem/B 解题心得: 这个题题意就是三个人玩游戏,每个人都有一个相同长度的字符串,一共有n轮游戏,每一轮三个人必 ...
- Codeforces Round #482 (Div. 2) B题
题目链接:http://codeforces.com/contest/979/problem/B B. Treasure Hunt time limit per test1 second memory ...
- 【枚举】【贪心】Codeforces Round #482 (Div. 2) B. Treasure Hunt
题意:给你3个字符串,3个人各对自己的字符串执行n轮操作,每一次选择一个字符变为任意一个和原来不同的字符.最后问你谁能使自己的串中的任意重复子串出现的次数最大化. 显然只需关注字符而非子串. 枚举每个 ...
- Codeforces Round #482 (Div. 2) B、Treasure Hunt(模拟+贪心)979B
题目 大致题意 n表示要进行n次操作,接着给出三个字符串,表示三个人初始拥有的串.每次操作要替换字符串中的字母,询问最后在游戏中曾出现过的相同的子串谁最多. 思路 (1) 讨论最多的子串,肯定是全部 ...
随机推荐
- 【深入.NET平台】浅谈.NET Framework基元类型
什么是基元类型? 初学者可能很少听说过这个名词,但是平时用得最多的肯定是基元类型.先看下面两行代码: System.Int32 a = ; ; 上面两行代码都表示声明一个int类型的变量,但在平时写 ...
- AJPFX关于java 知识点的集合
1 .对象的初始化 (1 )非静态对象的初始化 在创建对象时,对象所在类的所有数据成员会首先进行初始化. 基本类型:int 型,初始化为0. 如果为对象:这些对象会按顺序初始化. ※在所有类成员初始化 ...
- vue cli 3 打包过大问题
vue cli 3 打包命令 npm run build,这种情况下的打包可以通过设置 vue.config.js里面的 productionSourceMap: false. 如果是自己设置的打包环 ...
- CCF|最小差值|Java
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = ...
- Java编程思想总结笔记Chapter 5
初始化和清理是涉及安全的两个问题.本章简单的介绍“垃圾回收器”及初始化知识. 第五章 初始化与清理 目录:5.1 用构造器确保初始化5.2 方法重载5.3 默认构造器5.4 this关键字5.5 清 ...
- C#枚举中的位运算权限分配
什么是位运算 常用的位运算主要有与(&), 或(|)和非(~), 比如: & = ; | = ; ~ = ; 运用在权限设计中 先建立一个枚举表示所有的权限管理操作: [Flags] ...
- vue2.0 路由知识一(路由的创建的全过程)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- python 内置2to3工具将python2代码转换为python3代码
python2与python3代码不兼容,如果需要python2代码在python3环境下运行,需要将代码进行转换,本文介绍使用python3内置工具2to3.py对代码进行转换 一:2to3.py在 ...
- 06Hibernate基本配置
Hibernate基本配置 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊先保存后修改
- vue全选与反选以及通过使用如何filter删除数据
在vue学习经常遇到的一些基本问题,下面是购物车里面的部分功能,分享给初学者,直接上源码: <!DOCTYPE html><html> <head> <met ...