洛谷 P2296 尋找道路

題目描述

在有向圖G 中,每條邊的長度均為1 ,現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件:

1 .路徑上的所有點的出邊所指向的點都直接或間接與終點連通。

2 .在滿足條件1 的情況下使路徑最短。

注意:圖G 中可能存在重邊和自環,題目保證終點沒有出邊。

請你輸出符合條件的路徑的長度。

輸入輸出格式

輸入格式:

?

輸入文件名為road .in。

第一行有兩個用一個空格隔開的整數n 和m ,表示圖有n 個點和m 條邊。

接下來的m 行每行2 個整數x 、y ,之間用一個空格隔開,表示有一條邊從點x 指向點y 。

最后一行有兩個用一個空格隔開的整數s 、t ,表示起點為s ,終點為t 。

?

輸出格式:

?

輸出文件名為road .out 。

輸出只有一行,包含一個整數,表示滿足題目?述的最短路徑的長度。如果這樣的路徑不存在,輸出- 1 。

?

輸入輸出樣例

輸入樣例#1:
3 2  
1 2  
2 1  
1 3  
輸出樣例#1:
-1
輸入樣例#2:
6 6  
1 2  
1 3  
2 6  
2 5  
4 5  
3 4  
1 5  
輸出樣例#2:
3

說明

解釋1:

如上圖所示,箭頭表示有向道路,圓點表示城市。起點1 與終點3 不連通,所以滿足題

目?述的路徑不存在,故輸出- 1 。

解釋2:

如上圖所示,滿足條件的路徑為1 - >3- >4- >5。注意點2 不能在答案路徑中,因為點2連了一條邊到點6 ,而點6 不與終點5 連通。

對于30%的數據,0<n≤10,0<m≤20;

對于60%的數據,0<n≤100,0<m≤2000;

對于100%的數據,0<n≤10,000,0<m≤200,000,0<x,y,s,t≤n,x≠t。

?

?

正反存邊

反跑dfs標記終點能到達的點 也就是能到達終點的點

然后把出邊不能到達終點的點標記為不能走

然后正跑spfa

屠龍寶刀點擊就送

#include <vector>
#include <cstdio>
#include <queue>
#define N 10005
using namespace std;
vector<int>G1[N],G2[N];
bool cant[N],vis[N];
int n,m,s,t,dis[N];
void dfs(int x)
{vis[x]=1;for(int i=0;i<G2[x].size();++i){int v=G2[x][i];if(!vis[v]) dfs(v);}
}
int main()
{scanf("%d%d",&n,&m);for(int x,y,i=1;i<=m;++i){scanf("%d%d",&x,&y);G1[x].push_back(y);G2[y].push_back(x); }scanf("%d%d",&s,&t);dfs(t);for(int i=1;i<=n;++i){bool flag=false;if(!vis[i]) {cant[i]=1;continue;}for(int j=0;j<G1[i].size();++j){int v=G1[i][j];if(!vis[v]) {flag=1;break;} }if(flag) {cant[i]=1;continue;}}for(int i=1;i<=n;++i) dis[i]=0x3f3f3f3f,vis[i]=0;dis[s]=0;vis[s]=1;queue<int>q;q.push(s);for(int now;!q.empty();){now=q.front();q.pop();vis[now]=0;if(cant[now]) continue;for(int i=0;i<G1[now].size();++i){int v=G1[now][i];if(dis[v]>dis[now]+1){dis[v]=dis[now]+1;if(!vis[v]){q.push(v);vis[v]=1; }}}}dis[t]==0x3f3f3f3f?printf("-1"):printf("%d",dis[t]);return 0;
}

?

轉載于:https://www.cnblogs.com/ruojisun/p/7506696.html

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

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

相關文章

Feature Preprocessing on Kaggle

剛入手data science, 想著自己玩一玩kaggle&#xff0c;玩了新手Titanic和House Price的 項目, 覺得基本的baseline還是可以寫出來&#xff0c;但是具體到一些細節&#xff0c;以至于到能拿到的出手的成績還是需要理論分析的。 本文旨在介紹kaggle比賽到各種原理與技巧&#xf…

十天沖刺-04

昨天&#xff1a;完成了日歷界面的部署&#xff0c;并且能夠獲取到選中的日期 今天&#xff1a;完成根據日期查找消費記錄功能 問題&#xff1a;日歷界面占用屏幕太多&#xff0c;后期會進行調整轉載于:https://www.cnblogs.com/liujinxin123/p/10760254.html

構建Spring Boot程序有用的文章

構建Spring Boot程序有用的文章&#xff1a; http://www.jb51.net/article/111546.htm轉載于:https://www.cnblogs.com/xiandedanteng/p/7508334.html

如果您遇到文件或數據庫問題,如何重置Joomla

2019獨角獸企業重金招聘Python工程師標準>>> 如果您遇到Joomla站點的問題&#xff0c;那么重新安裝其核心文件和數據庫可能是最佳解決方案。 了解問題 這種方法無法解決您的所有問題。但它主要適用于由Joomla核心引起的問題。 運行Joomla核心更新后&#xff0c;這些…

數組初始化 和 vector初始化

int result[256] {0}; 整個數組都初始化為0 vector<int> B(length,1); 整個vector初始化為1 如果你定義的vector是這樣定義的&#xff1a; vector<int> B; 去初始化&#xff0c;千萬不要用&#xff1a; for(int i 0;i < length;i)B[i] 1; 這樣會數組越界&…

Genymotion模擬器拖入文件報An error occured while deploying the file的錯誤

今天需要用到資源文件&#xff0c;需要將資源文件拖拽到sd卡中&#xff0c;但老是出現這個問題&#xff1a; 資源文件拖不進去genymotion。查看了sd的DownLoad目錄&#xff0c;確實沒有成功拖拽進去。 遇到這種問題的&#xff0c;我按下面的思路排查問題&#xff1a; Genymotio…

激光炸彈(BZOJ1218)

激光炸彈&#xff08;BZOJ1218&#xff09; 一種新型的激光炸彈&#xff0c;可以摧毀一個邊長為R的正方形內的所有的目標。現在地圖上有n(N<10000)個目標&#xff0c;用整數Xi,Yi(其值在[0,5000])表示目標在地圖上的位置&#xff0c;每個目標都有一個價值。激光炸彈的投放是…

/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15 not found

解決錯誤呈現該錯誤的原因是當前的GCC版本中&#xff0c;沒有GLIBCXX_3.4.15&#xff0c;須要安裝更高版本。我們可以輸入&#xff1a;strings /usr/lib/libstdc.so.6 | grep GLIBCXX&#xff0c;查看當前的GCC版本&#xff0c;成果如下&#xff1a;GLIBCXX_3.4 GLIBCXX_3.4.1 …

用servlet設計OA管理系統時遇到問題

如果不加單引號會使得除變量和int類型的值不能傳遞 轉發和重定向的區別 轉發需要填寫完整路徑&#xff0c;重定向只需要寫相對路徑。原因是重定向是一次請求之內已經定位到了服務器端&#xff0c;轉發則需要兩次請求每次都需要完整的路徑。 Request和response在解決中文亂碼時的…

JDK源碼——利用模板方法看設計模式

前言&#xff1a; 相信很多人都聽過一個問題&#xff1a;把大象關進冰箱門&#xff0c;需要幾步&#xff1f; 第一&#xff0c;把冰箱門打開&#xff1b;第二&#xff0c;把大象放進去&#xff1b;第三&#xff0c;把冰箱門關上。我們可以看見&#xff0c;這個問題的答案回答的…

[Usaco2010 Mar]gather 奶牛大集會

1827: [Usaco2010 Mar]gather 奶牛大集會 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1129 Solved: 525 [Submit][Status][Discuss]Description Bessie正在計劃一年一度的奶牛大集會&#xff0c;來自全國各地的奶牛將來參加這一次集會。當然&#xff0c;她會選擇最方便的…

與TIME_WAIT相關的幾個內核參數

問題 公司用瀏覽器訪問線上服務一會失敗一會成功&#xff0c;通過ssh連接服務器排查時發現ssh也是這樣&#xff1b; 檢查 抓包后發現建立連接的請求已經到了服務器&#xff0c;但它沒有響應&#xff1b; 糾結了好久&#xff0c;后來在騰訊云技術支持及查了相關資料后發現是開啟…

View的繪制-layout流程詳解

目錄 作用 根據 measure 測量出來的寬高&#xff0c;確定所有 View 的位置。 具體分析 View 本身的位置是通過它的四個點來控制的&#xff1a; 以下涉及到源碼的部分都是版本27的&#xff0c;為方便理解觀看&#xff0c;代碼有所刪減。 layout 的流程 先通過 measure 測量出 Vi…

1-1、作用域深入和面向對象

課時1&#xff1a;預解釋 JS中的數據類型 number、string、 boolean、null、undefined JS中引用數據類型 object: {}、[]、/^$/、Date Function var num12; var obj{name:白鳥齊鳴,age:10}; function fn(){ console.log(勿忘初心方得始終&#xff01;) }console.log(fn);//把整…

茶杯頭開槍ahk代碼

;說明這個工具是為了茶杯頭寫的,F1表示換槍攻擊,F3表示不換槍攻擊,F2表示停止攻擊. $F1::loop{ GetKeyState, state, F2, Pif state D{break } Send, {l down}Send, {l up}sleep,10Send,{m down}Send,{m up} }return $F3::loop{ GetKeyState, state, F2, Pif state D{break }…

Vim使用技巧:撤銷與恢復撤銷

在使用VIM的時候&#xff0c;難免會有輸錯的情況&#xff0c;這個時候我們應該如何撤銷&#xff0c;然后回到輸錯之前的狀態呢&#xff1f;答案&#xff1a;使用u&#xff08;小寫&#xff0c;且在命令模式下&#xff09;命令。 但如果有時我們一不小心在命令模式下輸入了u&…

PaddlePaddle開源平臺的應用

最近接觸了百度的開源深度學習平臺PaddlePaddle&#xff0c;想把使用的過程記錄下來。 作用&#xff1a;按照這篇文章&#xff0c;能夠實現對圖像的訓練和預測。我們準備了四種顏色的海洋球數據&#xff0c;然后給不同顏色的海洋球分類為0123四種。 一、安裝paddlepaddle 1.系統…

Hyperledger Fabric區塊鏈工具configtxgen配置configtx.yaml

configtx.yaml是Hyperledger Fabric區塊鏈網絡運維工具configtxgen用于生成通道創世塊或通道交易的配置文件&#xff0c;configtx.yaml的內容直接決定了所生成的創世區塊的內容。本文將給出configtx.yaml的詳細中文說明。 如果需要快速掌握Fabric區塊鏈的鏈碼與應用開發&#x…

js閉包??

<script>var name "The Window";var object {name : "My Object",getNameFunc : function(){console.log("11111");console.log(this); //this object //調用該匿名函數的是對象return function(){console.log("22222");co…

JavaScript----BOM(瀏覽器對象模型)

BOM 瀏覽器對象模型 BOM 的全稱為 Browser Object Model,被譯為瀏覽器對象模型。BOM提供了獨立于 HTML 頁面內容&#xff0c;而與瀏覽器相關的一系列對象。主要被用于管理瀏覽器窗口及與瀏覽器窗口之間通信等功能。 1、Window 對象 window對象是BOM中最頂層對象&#xff1b;表示…