思路 :首先既然要滿足第乙個條件,我們可以建反向邊,從起點出發走反向邊,標記所能到達的點。沒有被標記過的點就把他的父親(誰到它的點)和它本身給標記為不可到達,然後就求最短路,如果碰到標記為不可到達的點,就continue,最後dis[e]就是答案。
** :
1 #include 2#define inf 0x3f3f3f3f
3using
namespace
std;
4int n, m, head[10001], head1[10001], dis[10001], vis[10001], no[10001], mark[10001
], num, num1, s, e;
5struct
node
6stu[200001], stu1[200001
];9 inline void add(int x, int y, int z)//
正向邊
1017 inline void add1(int x, int y, int z)//
反向邊
1825 inline void dfs(int u)//
從終點dfs搜尋能到達的點
2635}36
return;37
}38 inline void spfa(int s)//
求最短路
3958
if(dis[k] > dis[u] +stu[i].val)
5966}67
}68}69
return;70
}71signed main()
7280 scanf("
%d %d
", &s, &e);
81dfs(e);
82 mark[e] = 1;//
記得把終點標記為搜到了
83for(register int u = 1; u <= n; ++u)//
搜尋所有點
8493}94
}95spfa(s);
96 printf(dis[e] == inf ? "
-1" : "%d"
, dis[e]);
97return0;
98 }
洛谷P2296 尋找道路
在有向圖g 中,每條邊的長度均為1 現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1 的情況下使路徑最短。注意 圖g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度。輸入格式...
洛谷 P2296 尋找道路
題目描述 在有向圖g 中,每條邊的長度均為1 現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1 的情況下使路徑最短。注意 圖g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度...
洛谷 P2296 尋找道路
題目大意 在乙個有向圖中找出2點之間的最短路,並且路徑上的所有點的出邊所指向的點都直接或間接與終點連通。題解 spfa 佇列 dfs 1.從終點方向搜,把終點能到的點標記可到達。2.把終點能到達的點的出邊判斷,如果出邊未被標記則狀態更新為不可到達。3.做spfa,若t i 可以到達就做,不然不做。v...