是我算法本身的问题吗?
查看原帖
是我算法本身的问题吗?
490314
小铭同学lym楼主2021/10/1 16:04

大根堆+Dij+链式前向星

过了样例,WA了#3、#4、#5、#6

#include<bits/stdc++.h>
#define rg register int 
using namespace std;
const int MAXM=(2*1e5)+5,MAXN=(1e5)+5,INF=-(1<<30);
struct node
{
    int id,dis;
    bool operator < (const node& CSP)const
    {
        return dis<CSP.dis;
    }
}; 
priority_queue<node>Que;
int head[MAXM],nxt[MAXM],to[MAXM],wei[MAXM],cnt,n,m,s=1,d[MAXN];
bool pd[MAXN];
void add(int From,int To,int Wei)
{
    ++cnt;
    to[cnt]=To;
    wei[cnt]=Wei;
    nxt[cnt]=head[From];
    head[From]=cnt;
}
int main()
{
    scanf("%d%d",&n,&m);
    int u,v,w;
    node tmp;
    for(rg i=1;i<=m;++i)
        scanf("%d%d%d",&u,&v,&w),add(u,v,w);
    for(rg i=1;i<=n;++i) d[i]=INF;
    d[s]=0,tmp.id=s,tmp.dis=0;
    Que.push(tmp);
    while(!Que.empty())
    {
        tmp=Que.top();Que.pop();
        int x=tmp.id;
        if(pd[x]) continue;
        pd[x]=1;
        for(rg i=head[x];i;i=nxt[i])
        {
            if(d[to[i]]<d[x]+wei[i])
            {
                d[to[i]]=d[x]+wei[i];
                if(!pd[to[i]])
                {
                    tmp.id=to[i];
                    tmp.dis=d[to[i]];
                    Que.push(tmp);  
                } 
            }
        }
    }
    if(d[n]==INF)
    	printf("-1");
    else
    	printf("%d",d[n]);
}
2021/10/1 16:04
加载中...