求助!
查看原帖
求助!
409487
qu200918楼主2023/11/18 23:18
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=510,INF=1e18;
struct Node{
	ll pos,dst;
	bool operator < (const Node &a) const{
		return a.dst<dst;
	}
};
ll m,n,ans[N];
bool vst[N];
vector<Node> to[N];
priority_queue<Node> q;
void Dijkstra()
{
	q.push((Node){1,0});
	while(!q.empty())
	{
		Node now=q.top();
		q.pop();
		if(vst[now.pos]) continue;
		vst[now.pos]=1;
		for(ll i=0;i<to[now.pos].size();i++)
		{
			ll nxt=to[now.pos][i].pos,cost=to[now.pos][i].dst+now.dst;
			if(cost<ans[nxt])
			{
				ans[nxt]=cost;
				q.push((Node){nxt,cost});
			}
		}
	}
}
int main()
{
	scanf("%lld%lld",&m,&n);
	for(ll i=1;i<=n;i++) ans[i]=INF;
	ans[1]=0;
	string s;
	getline(cin,s);//过滤第一个回车 
	for(ll i=1;i<=m;i++)
	{
		vector<ll> line;//不可以在全局定义 line然后用 clear,因为 clear不回收空间 
		getline(cin,s);
		ll now=0;
		for(ll i=0;i<s.size();i++)
		{
			if(s[i]==' ')
			{
				line.push_back(now);
				now=0;
			}
			else now=now*10+(s[i]-'0');
		}
		line.push_back(now);
		for(ll j=0;j<line.size()-1;j++)
			for(ll k=j+1;k<line.size();k++)
				to[line[j]].push_back((Node){line[k],1});
	}
	Dijkstra();
	if(ans[n]==INF) printf("NO");
	else printf("%lld",ans[n]-1);
	return 0;
}

这个代码我在本地测数据1答案是2,但是到评测机上测数据1出来的答案就变成NO了,不知道为什么,各位大佬帮忙看看呗QAQ


附上数据1:

Input:

4

15

2 11

1 3 4 5 9

3 6 11

2 7 8 10 11 12 13 15

Standard Output:

2

2023/11/18 23:18
加载中...