30 pts 求助
查看原帖
30 pts 求助
1028047
ZinfI_Sh楼主2023/12/30 18:16

测试点输出好像都对了,就是只有输出NO的点能过

#include<bits/stdc++.h>
#define LL long long
#define D double
using namespace std;
LL dis[1001][1001],inp[1001],inpp;
bool can[1001];
int main()
{
    LL n,m;
    cin>>m>>n;
    memset(dis,0x3f,sizeof(dis));
    getchar();
    for(int i=1;i<=m;i++)
    {
        inpp=0;
        char c='a';
        int tmp=0;
        while(1)
        {
        	c=getchar();
        	if(c>='0'&&c<='9')
        	{
				tmp*=10;
				tmp+=c-48;
			}
			else
			{
        		inp[++inpp]=tmp;
        		tmp=0;
        		if(c=='\n')break;
			}
		}
        for(int j=1;j<=inpp;j++)
        {
            for(int jj=j;jj<=inpp;jj++)
            {
            	if(j==jj)continue;
                dis[inp[j]][inp[jj]]=1;
                can[jj]=1;
            }
        }
    }
//        Temp(n);
    for(int k=1;k<=n;k++)
    {
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=n;j++)
    		{
    			if(dis[i][k]+dis[k][j]<dis[i][j])
    			{
    				can[j]=1;
    				dis[i][j]=dis[i][k]+dis[k][j];
				}
			}
		}
	}
    if(!can[n])
        cout<<"NO";
    else
        cout<<dis[1][n]-1;
    return 0;
}
2023/12/30 18:16
加载中...