【题意分析】
这是道挺好的思维题,但是被我秒了
首先直觉告诉我们连反边,从终点开始往前进行bfs扩展标记,把那些可以到达终点的边全都找出来。
但题目说能到达终点的点,他们连向的点全部都能到达终点,那么我们就找那些没有标记的点,他们连向的点全部是不符合要求的
这样筛选过之后剩下的全都是符合题意的点,跑一遍最短路就好了
Code:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <algorithm>
#define INF 2147400000
#define MAXN 300000
using namespace std;
struct fls {
int to, next;
}edge[MAXN];
bool vis[MAXN], Vis[MAXN];
int head[MAXN], q[MAXN], dist[MAXN], n, m, S, T, cnt;
inline int read () {
register int s = 0, w = 1;
register char ch = getchar ();
while (! isdigit (ch)) {
if (ch ==