hack(数据太弱, 但题解不错
查看原帖
hack(数据太弱, 但题解不错
1012734
XFlypig楼主2023/8/14 09:39

某份代码

#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<cstdio>
#include<vector>
#include<ctime>
#include<unordered_map>
#include<map>
#include<cstdlib>
#include<iomanip>
#include<queue>
#include<set>
#include<stack>
#include<algorithm>
#include<fstream>
using namespace std;
vector<int> g[10010];
int in[10010];
int vis[10010];
int dis[10010];
queue<int> q;
int main() 
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=m;i++)
	{
		int u,v;
		cin>>u>>v;
		g[v].push_back(u);
		in[u]++;
	}
	int s,t;
	cin>>s>>t;
	for(int i=1;i<=n;i++)
	{
		if(in[i]==0&&i!=t)
		{
			for(int it:g[i])
			{
				if(vis[it])
					continue;
				vis[it]=1;
			}
		}
	}
	q.push(t);
	while(q.size())
	{
		int u=q.front();
		q.pop();
		for(int it:g[u])
		{
			if(vis[it])
				continue;
			dis[it]=dis[u]+1;
			q.push(it);
			vis[it]=1;
		}
	}
	if(dis[s]==0)
		cout<<-1;
	else
		cout<<dis[s];
	return 0;
}

思路

图中点 7 的出边指向了 8 , 但 8 并不直接或间接与终点相连, 所以 7 并不能作为最短路径上一点, 然而这份代码并未考虑这一点并输出正确答案,却能AC, 我提供的数据一正确答案应该是3, 该代码输出为 2

数据二考虑起点不满足条件, 不可以作为答案路径上一点, 则答案为零, 该代码依旧没有考虑这点却AC了

hack数据

一:

9 10
1 2
1 3
2 4
3 5
4 6
5 6
1 7
7 6
7 8
8 9
1 6

二:

4 6
4 2
4 4
1 1
1 4
1 1
1 3
1 3
2023/8/14 09:39
加载中...