解题报告:luogu P2299

Posted tlx-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解题报告:luogu P2299相关的知识,希望对你有一定的参考价值。

题目链接:P2299 Mzc和体委的争夺战
单源最短路板子题吗,体面晦涩难懂(语文不好),以为是有向图,只有(30pts),其实是无向的,我使用了刚学来的(SPFA),通过了此题:

(Code):

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int inf=2147483647;
queue<int> q;
struct node
{
    int to,nxt,w;
}e[200005];
int head[200005],cnt=0;
void add(int u,int v,int c)
{
    e[++cnt].to=v;
    e[cnt].nxt=head[u];
    e[cnt].w=c;
    head[u]=cnt;
}
int dis[200005],vis[200005];
void SPFA()
{
    while(!(q.empty()))
    {
        int k=q.front();
        q.pop();
        vis[k]=0;
        for(int i=head[k];i;i=e[i].nxt)
        {
            int j=e[i].to;
            if(dis[j]>dis[k]+e[i].w)
            {
                dis[j]=dis[k]+e[i].w;
                if(!vis[j]) q.push(j),vis[j]=1;
            }
        }
    }
}
void init(int n)
{
    for(int i=1;i<=n;i++) dis[i]=inf,vis[i]=0;
}
int n,m;
int l,r,p;
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&l,&r,&p);
        add(l,r,p);
    }
    init(n);
    dis[1]=0;
    vis[1]=1;
    q.push(1);
    SPFA();
    cout<<dis[n]<<"
";
    //for(int i=1;i<=n;i++) printf("%d ",dis[i]);
    return 0;
}

可以说是(SPFA)板子,背一下

以上是关于解题报告:luogu P2299的主要内容,如果未能解决你的问题,请参考以下文章

解题报告:luogu P1892

解题报告:luogu P1445

解题报告:luogu P2572

解题报告:luogu P2572

解题报告:luogu P6057

解题报告:luogu P2220