《P3398 倉鼠找 sugar》

題目描述

小倉鼠的和他的基(mei)友(zi)sugar 住在地下洞穴中,每個節點的編號為?1~n。地下洞穴是一個樹形結構。這一天小倉鼠打算從從他的臥室(a)到餐廳(b),而他的基友同時要從他的臥室(c)到圖書館(d)。他們都會走最短路徑。現在小倉鼠希望知道,有沒有可能在某個地方,可以碰到他的基友?

小倉鼠那么弱,還要天天被 zzq 大爺虐,請你快來救救他吧!

輸入格式

第一行兩個正整數?n?和?q,表示這棵樹節點的個數和詢問的個數。

接下來?n?1?行,每行兩個正整數?u?和?v,表示節點?u?到節點?v?之間有一條邊。

接下來?q?行,每行四個正整數?a、b、c?和?d,表示節點編號,也就是一次詢問,其意義如上。

輸出格式

對于每個詢問,如果有公共點,輸出大寫字母?Y;否則輸出N

輸入輸出樣例

輸入 #1復制

5 5
2 5
4 2
1 3
1 4
5 1 5 1
2 2 1 4
4 1 3 4
3 1 1 5
3 5 1 4

輸出 #1復制

Y
N
Y
Y
Y

說明/提示

本題時限 1s,內存限制 128M,因新評測機速度較為接近 NOIP 評測機速度,請注意常數問題帶來的影響。

20%?的數據?n,q≤200。

40%?的數據?n,q≤2×103。

70%?的數據?n,q≤5×104。

100%?的數據?1≤n,q≤105。

代碼實現:

#include<bits/stdc++.h>
using namespace std;

const int MAX_NODE = 100010;
int f[MAX_NODE][25], depth[MAX_NODE], distance[MAX_NODE];
int logLevel, totalNodes, totalQueries, edgeCount;
int adjVer[2*MAX_NODE], adjNext[2*MAX_NODE], adjHead[MAX_NODE];
queue<int> bfsQueue;

void addEdge(int fromNode, int toNode) {
adjVer[++edgeCount] = toNode;
adjNext[edgeCount] = adjHead[fromNode];
adjHead[fromNode] = edgeCount;
}

int findLCA(int nodeA, int nodeB) {
if (depth[nodeA] > depth[nodeB]) {
swap(nodeA, nodeB);
}
for (int k = logLevel; k >= 0; k--) {
if (depth[f[nodeB][k]] >= depth[nodeA]) {
nodeB = f[nodeB][k];
}
}
if (nodeA == nodeB) {
return nodeA;
}
for (int k = logLevel; k >= 0; k--) {
if (f[nodeA][k] != f[nodeB][k]) {
nodeA = f[nodeA][k];
nodeB = f[nodeB][k];
}
}
return f[nodeA][0];
}

int getDistance(int nodeX, int nodeY) {
int lcaNode = findLCA(nodeX, nodeY);
return distance[nodeX] + distance[nodeY] - 2 * distance[lcaNode];
}

int main() {
scanf("%d%d", &totalNodes, &totalQueries);
logLevel = (int)(log(totalNodes) / log(2)) + 1;

for (int i = 1; i <= totalNodes; i++) {
adjHead[i] = 0;
depth[i] = 0;
}

for (int i = 1; i < totalNodes; i++) {
int from, to;
scanf("%d%d", &from, &to);
addEdge(from, to);
addEdge(to, from);
}

bfsQueue.push(1);
depth[1] = 1;
distance[1] = 0;

while (!bfsQueue.empty()) {
int currentNode = bfsQueue.front();
bfsQueue.pop();

for (int i = adjHead[currentNode]; i; i = adjNext[i]) {
int neighborNode = adjVer[i];
if (depth[neighborNode]) {
continue;
}
depth[neighborNode] = depth[currentNode] + 1;
distance[neighborNode] = distance[currentNode] + 1;
f[neighborNode][0] = currentNode;
for (int k = 1; k <= logLevel; k++) {
f[neighborNode][k] = f[f[neighborNode][k-1]][k-1];
}
bfsQueue.push(neighborNode);
}
}

for (int i = 1; i <= totalQueries; i++) {
int path1Start, path1End, path2Start, path2End;
scanf("%d%d%d%d", &path1Start, &path1End, &path2Start, &path2End);

int distPath1 = getDistance(path1Start, path1End);
int distPath2 = getDistance(path2Start, path2End);
int crossDist1 = getDistance(path1Start, path2Start);
int crossDist2 = getDistance(path1End, path2End);

if (distPath1 + distPath2 >= crossDist1 + crossDist2) {
printf("Y\n");
} else {
printf("N\n");
}
}

return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89762.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89762.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89762.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

錘子助手插件功能六:啟用攔截消息撤回

錘子助手插件功能六&#xff1a;啟用攔截消息撤回錘子助手插件功能六&#xff1a;啟用攔截消息撤回&#x1f6e1;? 插件簡介 攔截撤回消息&#xff0c;信息不再消失&#x1f527; 功能說明?? 使用風險與注意事項&#x1f3af; 適合人群?? 結語錘子助手插件功能六&#xf…

深度解析:基于EasyX的C++黑白棋AI實現 | 算法核心+圖形化實戰

摘要 本文詳解C黑白棋AI實現&#xff0c;使用EasyX圖形庫打造完整人機對戰系統。涵蓋&#xff1a; 遞歸搜索算法&#xff08;動態規劃優化&#xff09; 棋盤狀態評估函數設計 圖形界面與音效集成 勝負判定與用戶交互 附完整可運行代碼資源文件&#xff0c;提供AI難度調節方案…

樹同構(Tree Isomorphism)

樹同構&#xff08;Tree Isomorphism&#xff09;?? 是圖論中的一個經典問題&#xff0c;主要研究兩棵樹在結構上是否“相同”或“等價”&#xff0c;即是否存在一種節點的一一對應關系&#xff0c;使得兩棵樹的結構完全一致&#xff08;不考慮節點的具體標簽或位置&#xff…

分享如何在保證畫質的前提下縮小視頻體積實用方案

大文件在通過互聯網分享或上傳時會遇到很多限制&#xff0c;比如電子郵件附件大小限制、社交媒體平臺的文件大小要求等。壓縮后的視頻文件更小&#xff0c;更容易上傳到網絡、發送給他人或共享在社交平臺上。它是一款無需安裝的視頻壓縮工具&#xff0c;解壓后直接運行&#xf…

SpringBoot 統一功能處理(攔截器、@ControllerAdvice、Spring AOP)

文章目錄攔截器快速入門攔截器詳解攔截路徑攔截器執行流程全局控制器增強機制(ControllerAdvice)統一數據返回格式&#xff08;ControllerAdvice ResponseBodyAdvice&#xff09;??全局異常處理機制??&#xff08;ControllerAdvice ExceptionHandler&#xff09;全局數據…

建筑墻壁損傷缺陷分割數據集labelme格式7820張20類別

數據集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;僅僅包含jpg圖片和對應的json文件)圖片數量(jpg文件個數)&#xff1a;7820標注數量(json文件個數)&#xff1a;7820標注類別數&#xff1a;20標注類別名稱:["Graffiti","Bearing","Wets…

圖書管理軟件iOS(iPhone)

圖書管理軟件iOS(iPhone)開發進度表2025/07/19圖書管理軟件開發開始一&#xff1a;圖書管理軟件開發iOS&#xff08;iPhone&#xff09;

MySQL配置性能優化

技術文章大綱&#xff1a;MySQL配置性能優化賽 引言 介紹MySQL性能優化的重要性&#xff0c;特別是在高并發、大數據場景下的挑戰。概述MySQL配置優化的核心方向&#xff08;如內存、查詢、索引等&#xff09;。引出比賽目標&#xff1a;通過配置調整提升MySQL性能指標&#xf…

uniapp微信小程序 實現swiper與按鈕實現上下聯動

1. 需求&#xff1a;頁面頂部展示n個小圖標。當選中某個圖標時&#xff0c;下方視圖會相應切換&#xff1b;反之&#xff0c;當滑動下方視圖時&#xff0c;頂部選中的圖標也會同步更新。 2. 思路&#xff1a; 上方scroll-view 區域渲染圖標&#xff0c;并且可左右滑動&#xff…

44.sentinel授權規則

授權規則是對請求者的身份做一個判斷,有沒有權限來訪問。 需求:一般網關負責請求的轉發到微服務,可以做身份判斷。但是如果具體某個微服務的訪問地址直接透露給了外部,不是經過網關訪問過來的。那這種就沒有經過網關也就無法進行身份判斷了。這時候就需要sentinel的授權規…

[硬件電路-55]:絕緣柵雙極型晶體管(IGBT)的原理與應用

一、IGBT的原理&#xff1a;MOSFET與BJT的復合創新IGBT&#xff08;Insulated Gate Bipolar Transistor&#xff09;是一種復合全控型電壓驅動式功率半導體器件&#xff0c;其核心設計融合了MOSFET&#xff08;金屬氧化物半導體場效應晶體管&#xff09;的高輸入阻抗&#xff0…

取消office word中的段落箭頭標記

對于一個習慣用WPS的人來說&#xff0c;office word中的段落箭頭讓人非常難受&#xff0c;所以想要取消該功能點擊文件-更多-選項然后在顯示界面&#xff0c;找到段落標記&#xff0c;取消勾選即可最終效果

Win11 上使用 Qume 搭建銀河麒麟V10 arm版虛擬機

安裝全程需要下載3個文件&#xff0c;可在提前根據文章1.1、2.1、2.2網址下載。 1 QEMU軟件簡介與安裝流程 QEMU&#xff08;Quick Emulator&#xff09;是一個開源軟件&#xff0c;可以模擬不同的計算機硬件行為&#xff08;如模擬arm架構&#xff09;&#xff0c;并可以創建…

[Linux]進程 / PID

一、認識進程 --- PCB寫一個死循環程序執行起來&#xff0c;觀察進程ps ajx 顯示所有進程用分號可以在命令行的一行中執行多條指令&#xff0c;也可以用 && &#xff1a;ps ajx | head -1 && ps ajx | grep proc終止掉進程后再查看&#xff1a;所以 ./p…

【人工智能99問】門控循環但單元(GRU)的結構和原理是什么?(13/99)

文章目錄GRU&#xff08;Gated Recurrent Unit&#xff09;的結構與原理一、GRU的結構與原理1. 核心組件2. 計算原理&#xff08;數學公式&#xff09;二、GRU的使用場景三、GRU的優缺點優點&#xff1a;缺點&#xff1a;四、GRU的訓練技巧五、GRU的關鍵改進六、GRU的相關知識與…

去中心化協作智能生態系統

摘要&#xff1a; 本報告深入HarmonyNet系統的工程實現細節&#xff0c;從開發者視角出發&#xff0c;提供了模塊化的組件規范、基于API的數據交互協議、可直接執行的業務邏輯流程以及經過優化的、可渲染的系統圖表。報告的核心在于將V2.0的高層架構轉化為具體的模塊接口&#…

FPGA自學——整體設計思路

FPGA自學——整體設計思路 1.設計定義 寫一套硬件描述語言&#xff0c;能夠在指定的硬件平臺上實現響應的功能 根據想要實現的功能進行設定&#xff08;如&#xff1a;讓LED一秒閃爍一次&#xff09; 2.設計輸入 方法&#xff1a; 編寫邏輯&#xff1a;使用verilog代碼描述邏輯…

ubuntu下好用的錄屏軟件

? 以下是 vokoscreen 的安裝教程,適用于 Linux 系統。vokoscreen 是一款簡單易用的屏幕錄制工具,支持錄制屏幕、攝像頭和音頻。 安裝 vokoscreen vokoscreen 提供了多種安裝方式,包括通過包管理器、Deb 包或 AppImage 文件。 方法 1:通過 apt 安裝(Ubuntu/Debian) su…

web安全漏洞的原理、危害、利用方式及修復方法

1. 原理 Web安全漏洞通常是由于Web應用程序在設計、編碼或配置過程中存在缺陷導致的。這些缺陷可能使攻擊者能夠獲取敏感數據、破壞應用程序或利用其進行其他惡意活動。2. 常見危害數據泄露&#xff1a;攻擊者可能竊取用戶的個人信息、密碼、信用卡信息等敏感數據。會話劫持&am…

Linux—Linux中的權限管理

Linux中的權限管理前言目錄一、shell命令以及運行原理二、Linux中的權限概念1、如何實現用戶賬號的切換2、如何僅提升當前指令的權限3、如何將普通用戶添加到信任列表三、Linux中的權限管理1、文件訪問者的分類&#xff08;人&#xff09;2、文件類型和訪問權限&#xff08;事物…