B. Two Fairs 解析(思維、DFS、組合)
Codeforce 1276 B. Two Fairs 解析(思維、DFS、組合)
今天我們來看看CF1276B
題目連結
題目
給一個連通圖,並給兩個點(\(a,b\)),求有多少點對使得:任一路徑都要經過\(a,b\)這兩點。
想法
首先因為不一定是棵樹,所以總覺得LCA用不到。而這個圖又很大,因此感覺應該是要從\(a,b\)這兩點出發做點事情,例如DFS。
當開始這樣想以後,會發現我們其實可以把所有點分成三種類型:
- \(a,b\)都走得到的
- 只有\(a\)走得到
- 只有\(b\)走得到
這樣最後的點對數量就是2類乘以3類。
實作起來只要從\(a,b\)分別DFS一次,不妨假設我們現在是從\(a\)開始DFS:
那麼只要遇到\(b\)時當前路徑的DFS停下來,這樣那些一定要經過\(b\)才能到的點就不可能訪問到了。
而區分以上三種類型的點,只要維護一個陣列(給每個點一個數字),在從\(a\)開始DFS時,經過的點都加上\(1\);從\(b\)開始DFS時,經過的點都加上\(2\)。以上就可以區分各種點了。
程式碼:
const int _n=2e5+10;
int t,n,m,a,b,u,v,ans[_n],cnt[4];
VI G[_n];
bool vis[_n];
void dfs(int v,int end,int val){
if(v==end)return; vis[v]=1; if(v!=a and v!=b)ans[v]+=val;
rep(i,0,SZ(G[v]))if(!vis[G[v][i]])dfs(G[v][i],end,val);
}
main(void) {cin.tie(0);ios_base::sync_with_stdio(0);
cin>>t;while(t--){
memset(vis,0,sizeof vis); rep(i,1,n+1)G[i].clear();
memset(ans,0,sizeof ans); memset(cnt,0,sizeof cnt);
cin>>n>>m>>a>>b;rep(i,0,m){cin>>u>>v;G[u].pb(v),G[v].pb(u);}
dfs(a,b,1); memset(vis,0,sizeof vis); dfs(b,a,2);
rep(i,1,n+1)cnt[ans[i]]++;
cout<<1ll*cnt[1]*cnt[2]<<'\n';
}
return 0;
}
標頭、模板請點Submission看
Submission
B. Two Fairs 解析(思維、DFS、組合)的更多相关文章
- D. Rescue Nibel! 解析(思維、組合、離散化、差分)
Codeforce 1420 D. Rescue Nibel! 解析(思維.組合.離散化.差分) 今天我們來看看CF1420D 題目連結 題目 給你\(n\)個區間,求有幾種方法使得\(k\)個區間的 ...
- D. New Year Santa Network 解析(思維、DFS、組合、樹狀DP)
Codeforce 500 D. New Year Santa Network 解析(思維.DFS.組合.樹狀DP) 今天我們來看看CF500D 題目連結 題目 給你一棵有邊權的樹,求現在隨機取\(3 ...
- D. Maximum Distributed Tree 解析(思維、DFS、組合、貪心、DP)
Codeforce 1401 D. Maximum Distributed Tree 解析(思維.DFS.組合.貪心.DP) 今天我們來看看CF1401D 題目連結 題目 直接看原題比較清楚,略. 前 ...
- B. Kay and Snowflake 解析(思維、DFS、DP、重心)
Codeforce 685 B. Kay and Snowflake 解析(思維.DFS.DP.重心) 今天我們來看看CF685B 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...
- E. Tree Queries 解析(思維、LCA)
Codeforce 1328 E. Tree Queries 解析(思維.LCA) 今天我們來看看CF1328E 題目連結 題目 給你一棵樹,並且給你\(m\le2e5\)個詢問(包含\(k\)個點) ...
- E. Xenia and Tree 解析(思維、重心剖分)
Codeforce 342 E. Xenia and Tree 解析(思維.重心剖分) 今天我們來看看CF342E 題目連結 題目 給你一棵樹,有兩種操作,把某點標成紅色或者查詢離某點最近的紅點有多遠 ...
- B. Nauuo and Circle 解析(思維、DP)
Codeforce 1172 B. Nauuo and Circle 解析(思維.DP) 今天我們來看看CF1172B 題目連結 題目 略,請直接看原題 前言 第一個該觀察的事情一直想不到,看了解答也 ...
- A. Arena of Greed 解析(思維)
Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...
- E. Almost Regular Bracket Sequence 解析(思維)
Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...
随机推荐
- Spring学习(四)IOC详解
一.简介 概念:控制反转是一种通过描述(在 Java 中可以是 XML 或者注解)并通过第三方(Spring)去产生或获取特定对象的方式.(被动创建) 优势: ① 降低对象之间的耦合 ② 我们不需要理 ...
- java基础篇1
JAVA基础篇1 注释 单行注释 //这是一个单行注释,由两个斜杠组成,不能嵌套多行注释 多行注释 /*这是一个 多行注释 ,//里面不能嵌套多行注释, 但是可以嵌套单行注释*/ 文档注释 /**ja ...
- java版集成Allure报告--注释使用说明
testNG集成Allure报告--注释使用说明 前置条件 首先需要下载allure的zip包解压,然后配置环境变量即可(win).allure的GitHub下载地址: 然后执行testn.xml或者 ...
- 实验一 使用sklearn的决策树实现iris鸢尾花数据集的分类
使用sklearn的决策树实现iris鸢尾花数据集的分类 要求: 建立分类模型,至少包含4个剪枝参数:max_depth.min_samples_leaf .min_samples_split.max ...
- web框架推导
django 引言 所有的web应用本质上就是一个socket服务端,而用户的浏览器. 软件开发架构 cs架构 bs架构 本质上,bs架构也是cs架构 http协议 网络协议 http协议 数据传输是 ...
- 前端gitlab-ci.yml 入门
说起来使用gitlab也有大半年了,每天都在跑pipeline,但是却没有好好研究过这个叫gitlab-ci.yml的文件.这次借着发布流程升级的机会,好好入门了一下. 主要分以下内容: stages ...
- 【题解】[SCOI]windy数
Link 题目大意:求给定一个区间内满足每一位的数相差大于\(2\)且没有前导零的数的个数. \(\text{Solution:}\) 我们可以按照数位\(dp\).设状态为当前要\(dp\)第\(p ...
- 部署docker swarm集群
基础环境 机器名称 IP地址 安装的软件 node-1 192.168.10.190 docker-ce node-2 192.168.10.191 docker-ce node-3 192.168. ...
- 一些IT service的相关知识
1. cmd是什么,怎么在电脑上打开cmd命令框. 在windows环境下,命令行程序为cmd.exe,是一个32位的命令行程序,微软Windows系统基于Windows上的命令解释程序,类似于微软的 ...
- How to install the NVIDIA drivers on Fedora 32
https://linuxconfig.org/how-to-install-the-nvidia-drivers-on-fedora-32 The NVIDIA Driver is a progra ...