題意:給定起點終點,找一條從起點到終點的最短路徑使路上的每個點都能有路徑到達終點。
我們先反著建一遍圖,然後從終點開始bfs一遍圖,標記所有終點可以到達的點。然後再列舉一遍點,如果這個點是終點沒法到達的點,那麼再列舉這個點所能連線的所有點,如果這些點是終點可以到達的,那麼這些點就是不符合條件的。最後在符合條件的點上做一遍最短路。
#include #include #include #include #include using namespace std;
const int maxn = 200010;
int start, end, n, m, u[maxn], v[maxn], dis[maxn];
bool vis1[maxn], vis2[maxn], vis[maxn];
struct edgee1[maxn<<2], e[maxn<<2];
int cnt1, cnt, head1[maxn], head[maxn];
void add1(int u, int v, int w)
void add(int u, int v, int w)
queueq1, q;
void bfs()
} }memcpy(vis2, vis1, sizeof(vis1));
for(int i = 1; i <= n; i++) }
}void spfa()
}} }
}int main()
scanf("%d%d",&start,&end);
bfs();
for(int i = 1; i <= m; i++)
spfa();
if(dis[end] == 233333333)
else
printf("%d\n",dis[end]);
return 0;
}
洛谷 2296 尋找道路
問題描述 在有向圖g 中,每條邊的長度均為1 現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1 的情況下使路徑最短。注意 圖g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度...
P2296 尋找道路
洛谷 p2296 在有向圖g 中,每條邊的長度均為1 現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1 的情況下使路徑最短。注意 圖g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路...
P2296 尋找道路
反著建圖,從點 include include include define ri register int using namespace std const int maxn 200020,inf 1310668019 int n,m,s,t,u maxn v maxn w maxn fst m...