和测试点完全一致,但是40分求助
查看原帖
和测试点完全一致,但是40分求助
409774
Maysoul楼主2023/5/4 19:39

下了#1的看了看,完全一致

找个神仙帮忙看一下

//2023/5/4
//别着急,先通读一遍题目
//别忘了开long long
//写完先看一遍怎么降复杂度
//要么开全局变量要么给定初值
//想想看,有什么情况需要特判
//std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+10;
const int INF=0x3f3f3f3f;
int num,ans;
int n,m,t; 
bool vis[1010];
int dis[1010],p=1,a[1010][1010],arr[1010];
string s;
void Dijkstra()
{
	for (int i=1;i<=n;i++)
	{
		dis[i]=a[1][i];
	}
	dis[1]=0;
	vis[1]=1;
	for (int i=1;i<=n-1;i++)
	{
		int temp=INF;
		for (int j=1;j<=n;j++)
		{
			if(!vis[j]&&dis[j]<temp)
			{
				temp=dis[j];
				t=j;
			}
		}
		if(temp>=INF)
		{
			return;
		}
		vis[t]=true;
		for (int j=1;j<=n;j++)
		{
			if(dis[j]>dis[t]+a[t][j])
			{
				dis[j]=dis[t]+a[t][j];
			}
		}
	}
}
int main()
{
	cin>>m>>n;
	memset(dis,0x3f,sizeof(dis));
	memset(a,0x3f,sizeof(a));
	getline(cin,s);
	for (int i=1;i<=m;i++)
	{
		getline(cin,s);
		int x=0;
		for (int j=0;j<s.length();j++)
		{
			if(s[j]==' ')
			{
				arr[p++]=x;
				x=0;
			}
			else
			{
				x=x*10+s[j]-'0';
			}
		}
		arr[p]=x;
		/*for (int i=1;i<=p;i++)
		{
			cout<<arr[i]<<endl;
		}*/
		for (int i1=1;i1<=p;i1++)
		{
			for (int j1=i1+1;j1<=p;j1++)
			{
				a[arr[i1]][arr[j1]]=1;
			}
		}
		p=1;
	}
	Dijkstra();
	if(dis[n]>=INF) cout<<"NO"<<endl;
	else cout<<dis[n]-1<<endl;
	return 0;
}

2023/5/4 19:39
加载中...