为什么下数据手测能过,交上去一个点也过不了???
查看原帖
为什么下数据手测能过,交上去一个点也过不了???
125212
Skies楼主2021/5/16 11:03

我的代码

#include <bits/stdc++.h>
using namespace std;
const int N= 1e6+10;
#define inf 0x3f3f3f3f
#define ll long long
#define ull unsigned long long
#define PII pair<int,int>
inline int inc(int x,int v,int mod){x+=v;return x>=mod?x-mod:x;}
inline int dec(int x,int v,int mod){x-=v;return x<0?x+mod:x;}
inline int rd(){int x=0,f=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;}
inline void write(int x){if(x==0){putchar(48);return;}int len=0,dg[20];while(x>0){dg[++len]=x%10;x/=10;}for(register int i=len;i>=1;i--)putchar(dg[i]+48);}
int d[N]; 
struct node{
	int to,val,nex;
}ed[N<<1];
int idx,head[N];
void add(int x,int y,int z)
{
	ed[++idx].to=y;
	ed[idx].nex=head[x];
	ed[idx].val=z;
	head[x]=idx;
	
}
int n,m,s;
void SPFA()
{
    bool v[N];
    memset(d,63,sizeof(d));
    queue<int>q;
    q.push(s);d[s]=0,v[s]=1;
    while(!q.empty())
    {
        int x=q.front();q.pop();v[x]=0;
        for(int i=head[x];i;i=ed[i].nex)
        {
            int y=ed[i].to;
            if(d[y]>d[x]+ed[i].val)
            {
                d[y]=d[x]+ed[i].val;
                if(!v[y])
                {
                    v[y]=1;q.push(y);
                }
            }
        }
    }
}

int main()
{
	//freopen("未命名1.in","r",stdin);
	//freopen("未命名1.out","w",stdout);
	
	cin>>n>>m>>s;
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		add(x,y,z);
	}
	SPFA();
	for(int i=1;i<=n;i++)
	{
		if(d[i]==1061109567)d[i]=(1ll<<31)-1;
		printf("%d ",d[i]);
	}
	
	
    return 0;
}

标准输入:

5 15 5
2 5 181
1 5 98
4 2 49
3 2 262
4 3 26
2 4 192
5 1 221
2 2 254
4 4 233
1 5 44
5 4 67
4 2 214
1 1 47
1 1 118
5 4 3

标准输出:

221 52 29 3 0 

我的输出

221 52 29 3 0

/zk

2021/5/16 11:03
加载中...